-
Notifications
You must be signed in to change notification settings - Fork 107
feat(fee): calculates messages size field #1290
feat(fee): calculates messages size field #1290
Conversation
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## main-v0.13.1 #1290 +/- ##
================================================
- Coverage 71.10% 71.01% -0.10%
================================================
Files 59 59
Lines 7639 7651 +12
Branches 7639 7651 +12
================================================
+ Hits 5432 5433 +1
- Misses 1780 1791 +11
Partials 427 427 ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r1, all commit messages.
Reviewable status: 1 of 3 files reviewed, 1 unresolved discussion (waiting on @ayeletstarkware and @noaov1)
crates/blockifier/src/transaction/transaction_execution.rs
line 90 at r1 (raw file):
} pub fn get_l1_handler_payload_size(&self) -> Option<usize> {
It's a bit weird to put this method on Transaction
, when most of types don't have it.
I'd do an if let
in the native_blockifier
code.
Code quote:
get_l1_handler_payload_size
b6518af
to
e48cefa
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 0 of 3 files reviewed, 1 unresolved discussion (waiting on @elintul and @noaov1)
crates/blockifier/src/transaction/transaction_execution.rs
line 90 at r1 (raw file):
Previously, elintul (Elin) wrote…
It's a bit weird to put this method on
Transaction
, when most of types don't have it.
I'd do anif let
in thenative_blockifier
code.
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r1, 2 of 2 files at r2, all commit messages.
Reviewable status: all files reviewed, 6 unresolved discussions (waiting on @ayeletstarkware and @elintul)
crates/blockifier/src/fee/gas_usage.rs
line 60 at r2 (raw file):
} pub fn calculate_messages_size(
Suggestion:
pub fn calculate_message_segment_size(
crates/blockifier/src/fee/gas_usage.rs
line 61 at r2 (raw file):
pub fn calculate_messages_size( tx_info: &TransactionExecutionInfo,
Why not pass directly [&tx_info.validate_call_info, &tx_info.execute_call_info]
? It's the only information that you need from the TransactionExecutionInfo
.
Code quote:
tx_info: &TransactionExecutionInfo,
crates/blockifier/src/fee/gas_usage.rs
line 72 at r2 (raw file):
for call_info in &call_infos { l2_to_l1_payloads_length .extend(call_info.get_sorted_l2_to_l1_payloads_length().into_iter().flatten());
What does it mean to use faltten()
on a result object?
Code quote:
.extend(call_info.get_sorted_l2_to_l1_payloads_length().into_iter().flatten());
crates/native_blockifier/src/transaction_executor.rs
line 74 at r2 (raw file):
let l1_handler_payload_size: Option<usize> = if let Transaction::L1HandlerTransaction(l1_handler_tx) = &tx { Some(l1_handler_tx.tx.calldata.0.len() - 1)
Consider defining a method for L1HandlerTransaction
to calculate the payload size.
Code quote:
Some(l1_handler_tx.tx.calldata.0.len() - 1)
crates/native_blockifier/src/transaction_executor.rs
line 87 at r2 (raw file):
Ok(tx_execution_info) => { tx_executed_class_hashes.extend(tx_execution_info.get_executed_class_hashes()); let messages_size =
Suggestion:
let message_segment_size =
e48cefa
to
1d22150
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 4 unresolved discussions (waiting on @elintul and @noaov1)
crates/blockifier/src/fee/gas_usage.rs
line 61 at r2 (raw file):
Previously, noaov1 (Noa Oved) wrote…
Why not pass directly
[&tx_info.validate_call_info, &tx_info.execute_call_info]
? It's the only information that you need from theTransactionExecutionInfo
.
Done.
crates/blockifier/src/fee/gas_usage.rs
line 72 at r2 (raw file):
Previously, noaov1 (Noa Oved) wrote…
What does it mean to use
faltten()
on a result object?
changed it to filter map
crates/native_blockifier/src/transaction_executor.rs
line 74 at r2 (raw file):
Previously, noaov1 (Noa Oved) wrote…
Consider defining a method for
L1HandlerTransaction
to calculate the payload size.
hope that i understood correctly
1d22150
to
2e97b56
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 1 of 4 files reviewed, 4 unresolved discussions (waiting on @ayeletstarkware and @elintul)
crates/blockifier/src/fee/gas_usage.rs
line 72 at r2 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
changed it to filter map
I meant the flatten()
inside the extend
. Notice that get_sorted_l2_to_l1_payloads_length
returns a result object.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 1 of 4 files reviewed, 4 unresolved discussions (waiting on @elintul and @noaov1)
crates/blockifier/src/fee/gas_usage.rs
line 72 at r2 (raw file):
Previously, noaov1 (Noa Oved) wrote…
I meant the
flatten()
inside theextend
. Notice thatget_sorted_l2_to_l1_payloads_length
returns a result object.
because the result get_sorted_l2_to_l1_payloads_length of is of type Vec. if I don't flatten the result, we get Vec<Vec>. do you know another way to do so?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 1 of 4 files reviewed, 4 unresolved discussions (waiting on @elintul and @noaov1)
crates/blockifier/src/fee/gas_usage.rs
line 72 at r2 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
because the result get_sorted_l2_to_l1_payloads_length of is of type Vec. if I don't flatten the result, we get Vec<Vec>. do you know another way to do so?
we get Vec<Vec>*
2e97b56
to
cbe718c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 1 of 4 files reviewed, 5 unresolved discussions (waiting on @ayeletstarkware, @elintul, and @noaov1)
crates/blockifier/src/fee/gas_usage.rs
line 75 at r5 (raw file):
Ok(vec) => l2_to_l1_payloads_length.extend(vec), Err(err) => return Err(err), }
l2_to_l1_payloads_length.extend(call_info.get_sorted_l2_to_l1_payloads_length()?);
Code quote:
match call_info.get_sorted_l2_to_l1_payloads_length() {
Ok(vec) => l2_to_l1_payloads_length.extend(vec),
Err(err) => return Err(err),
}
cbe718c
to
db76d80
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 1 of 4 files reviewed, 5 unresolved discussions (waiting on @elintul, @noaov1, and @Yael-Starkware)
crates/blockifier/src/fee/gas_usage.rs
line 75 at r5 (raw file):
Previously, Yael-Starkware (YaelD) wrote…
l2_to_l1_payloads_length.extend(call_info.get_sorted_l2_to_l1_payloads_length()?);
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r3, all commit messages.
Reviewable status: 2 of 4 files reviewed, 5 unresolved discussions (waiting on @ayeletstarkware, @elintul, and @Yael-Starkware)
crates/blockifier/src/fee/gas_usage.rs
line 61 at r2 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
Done.
Can you please align your code with the original one? See here.
crates/blockifier/src/fee/gas_usage.rs
line 72 at r2 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
we get Vec<Vec>*
Not relevant anymore (given you recent change). I would try to understand the meaning of faltten()
on a Result
object :)
crates/blockifier/src/transaction/transactions.rs
line 470 at r6 (raw file):
} pub fn get_payload_size(&self) -> Option<usize> {
Why return an Option
?
Suggestion:
pub fn get_payload_size(&self) -> usize {
db76d80
to
ef2c822
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 2 of 4 files reviewed, 5 unresolved discussions (waiting on @elintul, @noaov1, and @Yael-Starkware)
crates/blockifier/src/fee/gas_usage.rs
line 61 at r2 (raw file):
Previously, noaov1 (Noa Oved) wrote…
Can you please align your code with the original one? See here.
Done.
crates/blockifier/src/fee/gas_usage.rs
line 72 at r2 (raw file):
Previously, noaov1 (Noa Oved) wrote…
Not relevant anymore (given you recent change). I would try to understand the meaning of
faltten()
on aResult
object :)
Done.
crates/blockifier/src/transaction/transactions.rs
line 470 at r6 (raw file):
Previously, noaov1 (Noa Oved) wrote…
Why return an
Option
?
Done.
bb01465
to
1c9a0f2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r7, 1 of 2 files at r8, 1 of 1 files at r9, all commit messages.
Reviewable status: all files reviewed, 4 unresolved discussions (waiting on @ayeletstarkware and @elintul)
crates/blockifier/src/fee/gas_usage.rs
line 63 at r9 (raw file):
call_infos: &[&CallInfo], l1_handler_payload_size: Option<usize>, ) -> Result<usize, TransactionExecutionError> {
Suggestion:
) -> TransactionExecutionResult<usize> {
crates/blockifier/src/transaction/transactions.rs
line 471 at r9 (raw file):
pub fn get_payload_size(&self) -> usize { self.tx.calldata.0.len() - 1
Please use it here.
Suggestion:
pub fn payload_size(&self) -> usize {
// The calldata includes the "from" field, which is not a part of the payload.
self.tx.calldata.0.len() - 1
crates/native_blockifier/src/transaction_executor.rs
line 101 at r9 (raw file):
.iter() .filter_map(|&call_info| call_info.as_ref()) .collect::<Vec<&CallInfo>>();
Consider extracting into a method to be used here as well.
Code quote:
let call_infos: Vec<&CallInfo> =
[&tx_execution_info.validate_call_info, &tx_execution_info.execute_call_info]
.iter()
.filter_map(|&call_info| call_info.as_ref())
.collect::<Vec<&CallInfo>>();
1c9a0f2
to
0d7e9d8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @elintul and @noaov1)
crates/native_blockifier/src/transaction_executor.rs
line 101 at r9 (raw file):
Previously, noaov1 (Noa Oved) wrote…
Consider extracting into a method to be used here as well.
Will be added in a different PR
0d7e9d8
to
6df16f4
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 3 of 3 files at r10, 1 of 1 files at r11, all commit messages.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @elintul)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @elintul)
57140bb
to
a52d658
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r12, 1 of 1 files at r14, all commit messages.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @ayeletstarkware)
crates/blockifier/src/fee/gas_usage.rs
line 21 at r14 (raw file):
pub mod test; pub fn calculate_l2_to_l1_payloads_length_and_message_segment_length<'a>(
Please add a small struct MessageL1CostInfo
with those two fields and convert this function to its c-tor; can be done in another PR if too big of an addition.
Code quote:
calculate_l2_to_l1_payloads_length_and_message_segment_length
crates/native_blockifier/src/transaction_executor.rs
line 97 at r14 (raw file):
tx_executed_class_hashes.extend(tx_execution_info.get_executed_class_hashes()); tx_visited_storage_entries.extend(tx_execution_info.get_visited_storage_entries()); let call_infos: Vec<&CallInfo> =
This function is getting too long.
Please define a c-tor for PyBouncerInfo
receiving all it needs and move all related code (inc. your new code) there.
a52d658
to
94b0938
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @elintul)
crates/blockifier/src/fee/gas_usage.rs
line 21 at r14 (raw file):
Previously, elintul (Elin) wrote…
Please add a small struct
MessageL1CostInfo
with those two fields and convert this function to its c-tor; can be done in another PR if too big of an addition.
Done.
crates/native_blockifier/src/transaction_executor.rs
line 97 at r14 (raw file):
Previously, elintul (Elin) wrote…
This function is getting too long.
Please define a c-tor forPyBouncerInfo
receiving all it needs and move all related code (inc. your new code) there.
Will be done in a different PR
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 3 of 3 files at r15, all commit messages.
Reviewable status: all files reviewed, 6 unresolved discussions (waiting on @ayeletstarkware)
crates/blockifier/src/execution/call_info.rs
line 32 at r15 (raw file):
} #[cfg_attr(test, derive(Clone))]
Why?
Code quote:
#[cfg_attr(test, derive(Clone))]
crates/blockifier/src/execution/call_info.rs
line 35 at r15 (raw file):
#[derive(Debug, Default, Eq, PartialEq)] pub struct MessageL1CostInfo { pub l2_to_l1_payloads_length: Vec<usize>,
Suggestion:
l2_to_l1_payload_lengths
crates/blockifier/src/execution/call_info.rs
line 36 at r15 (raw file):
pub struct MessageL1CostInfo { pub l2_to_l1_payloads_length: Vec<usize>, pub message_segment_length: usize,
We have a new
c-tor; no need to leave the default one pub
lic.
Suggestion:
l2_to_l1_payloads_length: Vec<usize>,
message_segment_length: usize,
crates/blockifier/src/execution/call_info.rs
line 40 at r15 (raw file):
impl MessageL1CostInfo { pub fn new<'a>(
Rename to create
/calculate
, so it's clear to the reader work is done here.
Code quote:
new
crates/blockifier/src/execution/call_info.rs
line 47 at r15 (raw file):
for call_info in call_infos { l2_to_l1_payloads_length.extend(call_info.get_sorted_l2_to_l1_payloads_length()?); }
Is there a more idiomatic way to write this loop? Perhaps ChatGPT would suggest one.
Code quote:
let mut l2_to_l1_payloads_length = Vec::new();
for call_info in call_infos {
l2_to_l1_payloads_length.extend(call_info.get_sorted_l2_to_l1_payloads_length()?);
}
crates/blockifier/src/fee/gas_usage.rs
line 30 at r15 (raw file):
l1_handler_payload_size: Option<usize>, ) -> TransactionExecutionResult<usize> { let message_l1_cost_info = MessageL1CostInfo::new(call_infos, l1_handler_payload_size)?;
x2
Suggestion:
let MessageL1CostInfo { l2_to_l1_payloads_length, message_segment_length } =
MessageL1CostInfo::new(call_infos, l1_handler_payload_size)?;
94b0938
to
81aab7c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 2 of 6 files reviewed, 4 unresolved discussions (waiting on @elintul, @noaov1, and @Yael-Starkware)
crates/blockifier/src/execution/call_info.rs
line 32 at r15 (raw file):
Previously, elintul (Elin) wrote…
Why?
not needed. deleted.
crates/blockifier/src/execution/call_info.rs
line 36 at r15 (raw file):
Previously, elintul (Elin) wrote…
We have a
new
c-tor; no need to leave the default onepub
lic.
But i'm calling these fields in gas_usage.rs
crates/blockifier/src/execution/call_info.rs
line 47 at r15 (raw file):
Previously, elintul (Elin) wrote…
Is there a more idiomatic way to write this loop? Perhaps ChatGPT would suggest one.
Is flat_map better?
crates/blockifier/src/fee/gas_usage.rs
line 30 at r15 (raw file):
Previously, elintul (Elin) wrote…
x2
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r12, 4 of 4 files at r16, all commit messages.
Reviewable status: all files reviewed, 4 unresolved discussions (waiting on @ayeletstarkware)
crates/blockifier/src/execution/call_info.rs
line 36 at r15 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
But i'm calling these fields in gas_usage.rs
Where? Please link to the code.
crates/blockifier/src/execution/call_info.rs
line 47 at r15 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
Is flat_map better?
What exactly does it do?
crates/blockifier/src/execution/call_info.rs
line 44 at r16 (raw file):
) -> TransactionExecutionResult<Self> { let l2_to_l1_payload_lengths: Vec<usize> = call_infos .flat_map(|call_info| call_info.l2_to_l1_payload_lengths().unwrap())
Will cause panic
; instead, add the error variant to the appropriate error enum, and return a result - as before.
Code quote:
unwrap()
crates/native_blockifier/src/transaction_executor.rs
line 103 at r16 (raw file):
let MessageL1CostInfo { l2_to_l1_payload_lengths: _, message_segment_length } = MessageL1CostInfo::calculate( call_infos.into_iter(),
Can we move this up to the call_infos
line?
Code quote:
.into_iter()
81aab7c
to
9c065aa
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 3 of 6 files reviewed, 4 unresolved discussions (waiting on @elintul)
crates/blockifier/src/execution/call_info.rs
line 36 at r15 (raw file):
Previously, elintul (Elin) wrote…
Where? Please link to the code.
here:
let MessageL1CostInfo { l2_to_l1_payload_lengths, message_segment_length } = |
it doesn't work without the public visibality.
crates/blockifier/src/execution/call_info.rs
line 47 at r15 (raw file):
Previously, elintul (Elin) wrote…
What exactly does it do?
from rust-lang:
flat_map creates an iterator that works like map, but flattens nested structure.
The map
adapter is very useful, but only when the closure argument produces values. If it produces an iterator instead, there’s an extra layer of indirection. flat_map()
will remove this extra layer on its own.
In this case, where 'l2_to_l1_payload_lengths' returns a 'TransactionExecutionResult<Vec>', using 'flat_map' ensures that the final result is a flattened 'Vec'
crates/blockifier/src/execution/call_info.rs
line 44 at r16 (raw file):
Previously, elintul (Elin) wrote…
Will cause
panic
; instead, add the error variant to the appropriate error enum, and return a result - as before.
I tried using 'flat_map' but wasn't successful, so I went back to the previous version.
crates/native_blockifier/src/transaction_executor.rs
line 103 at r16 (raw file):
Previously, elintul (Elin) wrote…
Can we move this up to the
call_infos
line?
I tried but couldn't make it work.
9c065aa
to
cff99e8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 2 of 6 files reviewed, 4 unresolved discussions (waiting on @elintul)
crates/native_blockifier/src/transaction_executor.rs
line 103 at r16 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
I tried but couldn't make it work.
Fixed!
f52b135
to
c739383
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r17, 1 of 1 files at r18, 2 of 2 files at r20, all commit messages.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @ayeletstarkware)
crates/blockifier/src/execution/call_info.rs
line 36 at r15 (raw file):
Previously, ayeletstarkware (Ayelet Zilber) wrote…
here:
let MessageL1CostInfo { l2_to_l1_payload_lengths, message_segment_length } = it doesn't work without the public visibality.
Okay, didn't know that unpacking to the struct means the regular c-tor must be pub
lic.
crates/blockifier/src/execution/call_info.rs
line 102 at r19 (raw file):
/// Returns a list of Starknet L2ToL1Payload length collected during the execution, sorted /// by the order in which they were sent. pub fn get_sorted_l2_to_l1_payloads_length(&self) -> TransactionExecutionResult<Vec<usize>> {
Restore?
Code quote:
get_sorted_
The base branch was changed.
c739383
to
000e985
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 2 of 2 files at r21, all commit messages.
Reviewable status: complete! all files reviewed, all discussions resolved (waiting on @ayeletstarkware)
000e985
to
201dfa7
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 2 of 2 files at r22, all commit messages.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @ayeletstarkware)
a discussion (no related file):
Please link to the Python-side PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @elintul)
a discussion (no related file):
Previously, elintul (Elin) wrote…
Please link to the Python-side PR.
https://reviewable.io/reviews/starkware-industries/starkware/33090
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: complete! all files reviewed, all discussions resolved (waiting on @ayeletstarkware)
* Run cargo update Signed-off-by: Dori Medini <[email protected]> * Detach native_blockifier * Bump cairo-vm and cairo compiler New cairo-vm version includes performance optimizations. New cairo version only includes the new vm version. * Release 0.4.1-rc.0 * Re-attach native_blockifier, bump papyrus_storage * native_blockifier: Allow querying for `Blockifier` version. (starkware-libs#1249) This allows one to do: ``` import native_blockifier native_blockifier.blockifier_version() ``` And get the version the native was compiled with. Co-Authored-By: Gilad Chase <[email protected]> * Add updated version of estimate_casm_hash_computation_resources(). (starkware-libs#1314) * Resolve conflicts. * Reconnect nnative-blockifier Signed-off-by: Dori Medini <[email protected]> * Add the field kzg_resources to PyBouncerInfo. (starkware-libs#1321) * Add use_kzg_da flag to PyBlockInfo. (starkware-libs#1319) * Merge `main-v0.13.0` into `main` (resolve conflicts). * Remove gas price bounds from general config (starkware-libs#1329) Signed-off-by: Dori Medini <[email protected]> * Bump cairo-vm version (starkware-libs#1330) Signed-off-by: Dori Medini <[email protected]> * Update cairo compiler version and fix related TODOs. (starkware-libs#1332) * Small fix in into_block_context. (starkware-libs#1337) * Data gas prices in block context (starkware-libs#1336) Signed-off-by: Dori Medini <[email protected]> * Use try_from instead of as (starkware-libs#1322) * Use into instead of as (starkware-libs#1333) * Add MAX_L1_GAS_AMOUNT_U128 (starkware-libs#1335) * Refactor calculate_tx_gas_usage (starkware-libs#1320) * Change additional as to try_from and try_to (starkware-libs#1342) * Remove PyKzgResources. Reveal the state diff size. (starkware-libs#1341) * Make `BlockContext` a newtype around `BlockInfo` (starkware-libs#1323) The crux of this commit is the change in `block_context.rs`, which converts `BlockContext` into a wrapper around `BlockInfo` (which used to be `BlockContext`). Everything else is just delegating the accessors to the internal block_info, made by search-and-replace (no other changes). Motivation: - This change the groundwork for future refactor and consolidation of contexts. - Subsequent commits will extract non block-specific constants from `BlockInfo` into separate `ChainInfo` and `VersionedConstants` structs, which will be siblings of `block_info` inside `BlockContext`. Co-Authored-By: Gilad Chase <[email protected]> * Extract from `BlockInfo` into `ChainInfo` (starkware-libs#1344) `BlockInfo` should only contain block-level info, whereas chain-level information should be held at the `BlockContext` level, encapsulated in a dedicated `ChainInfo` struct. Changes: Only extract from `BlockInfo` and store in `BlockContext.chain_info: ChainInfo`. All other changes are search-replace + moving the fee_token_address getter into `ChainInfo`. TODO: extract more stuff from BlockInfo: version-dependant constants should be extracted into a dedicated VersionedConstants, which will be a member of BlockContext Co-Authored-By: Gilad Chase <[email protected]> * Revert changes of 776d7a5 (starkware-libs#1352) * fix(native_blockifier): Remove `PyGasPrices` (starkware-libs#1353) `PyX` types are intended to represent (a subset) of the real structure of object in Python. Currently Python is broken do to PyBlockInfo's FromPyObject expecting there to be a `PyGasPrices`, which doesn't exist in Ptyhon Co-Authored-By: Gilad Chase <[email protected]> * Rename `{into,to}_actual_cost_builder` (starkware-libs#1355) `into` implies `owned -> owned` cast, whereas `to` can imply `borrowed -> owned`. See this reference for naming convention: https://rust-lang.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv Co-Authored-By: Gilad Chase <[email protected]> * add missing internal panic in cairo1 (starkware-libs#1340) * add missing internal panic in cairo1 * update `test_stack_trace` and make it work with Cairo1 as well as Cairo0 * Align block info fields (starkware-libs#1358) Signed-off-by: Dori Medini <[email protected]> * ci: add commitlint in CI (starkware-libs#1313) Signed-off-by: Dori Medini <[email protected]> * Create the function calculate_tx_blob_gas_usage. (starkware-libs#1346) * Add direct cast from PyFelt into ContractAddress + Deref (starkware-libs#1345) Co-Authored-By: Gilad Chase <[email protected]> * fix: revert "Add direct cast from PyFelt into ContractAddress + Deref (starkware-libs#1345)" (starkware-libs#1364) This reverts commit 6b524c9. Python is fussy about derive_more, will TAL at it again later Co-Authored-By: Gilad Chase <[email protected]> * refactor(fee): split tx l1 gas computation to da and non-da sum, add fee test for empty transaction (starkware-libs#1339) * test: add stack trace regressions tests in Cairo1 for various call chains (starkware-libs#1367) * feat(fee): preparation-add the calldata length to the resource calcaultion (starkware-libs#1361) * build(fee): added new struct and field in preparation for using blob_gas (starkware-libs#1356) * feat(fee): modified calculate_tx_l1_gas_usage(s) added calculate_tx_gas_and_blob_gas_usage (starkware-libs#1357) * style: remove some unnecessary variables (starkware-libs#1366) * feat(fee): modified calculate_tx_l1_gas_usage(s), added calculate_tx_gas_and_blob_gas_usage (starkware-libs#1370) * refactor(state): replace GlobalContractCache default with GlobalContractCache new (starkware-libs#1368) * feat(fee): check gas amount including discounted data gas (starkware-libs#1374) Signed-off-by: Dori Medini <[email protected]> * test: add cairo0 variants to the new stack trace regression tests (starkware-libs#1371) * feat(fee): calculates messages size field (starkware-libs#1290) * fix(native_blockifier): change failure_flag type to bool (starkware-libs#1334) * fix(execution): convert all local errors to stack trace (starkware-libs#1378) Signed-off-by: Dori Medini <[email protected]> * fix(execution): change additional as to from (starkware-libs#1373) * Merge `main-v0.13.1` into `main` (resolve conflicts). * fix(native_blockifier): use PyCallType and PyEntryPointType instead of as (starkware-libs#1383) * ci: prevent PR title check on merges Signed-off-by: Dori Medini <[email protected]> * ci: ignore merge PRs when linting PR titles (starkware-libs#1388) Signed-off-by: Dori Medini <[email protected]> * refactor(native_blockifier): pybouncerinfo tx_weights field (starkware-libs#1347) * style(fee): fix error handle unpack (starkware-libs#1390) * feat(fee): add linear combination for gas and blob_gas (starkware-libs#1360) * refactor: change CustomHint error usage into VirtualMachineError::Other(anyhow::Error) (starkware-libs#1397) * refactor(state): use get_nonce_updates (starkware-libs#1398) * refactor: make the BlockContext constructor private as preparation for pre_process_block changes (starkware-libs#1385) * refactor: change variable and function names for gas_vector (starkware-libs#1400) * fix(fee): modified estimate_minimal_gas_vector, extracted compute_discounted_gas_from_gas_vector (starkware-libs#1401) * refactor: modified extraction in extract_l1_blob_gas_usage (from unwrap_or(0) to expect) (starkware-libs#1402) * test: update test_call_contract to new infra (starkware-libs#1404) Signed-off-by: Dori Medini <[email protected]> * feat: add VersionedConstants - Currently only covers the constants previously contained in `BlockInfo`. TODO: Add check if this covers all chain ids, which might have different contstants - Remove `BlockContextArgs`: no longer needed now that BlockContext can be initialized by 3 args of public types. * test: update test_replace_class to new infra (starkware-libs#1405) Signed-off-by: Dori Medini <[email protected]> * refactor: restructure old_block_number_and_hash as a struct (starkware-libs#1403) * chore(fee): gas computation refactor (starkware-libs#1408) Changes: 1. Implemented get_da_gas_cost, which returns a GasVector (depending on use_kzg_da flag). 2. Deleted calculate_tx_gas_usage_vector, because calculate_tx_l1_gas_usage does the same thing. 3. Derived derive_more::Add for GasVector to easily sum up gas costs. Signed-off-by: Dori Medini <[email protected]> * chore(fee): use GasVector as a return type for gas computations (starkware-libs#1409) Signed-off-by: Dori Medini <[email protected]> * refactor: rename context modules - Rename block_context.rs -> context.rs. This will hold all context types. - Rename block_execution.rs -> block.rs and move `BlockInfo` and `GasPrices` there (`GasPrices` is only used inside `BlockInfo`). No other changes. * chore(fee): integer VM gas usage (starkware-libs#1410) * chore(fee): use GasVector as a return type for gas computations Signed-off-by: Dori Medini <[email protected]> * chore(fee): integer VM gas usage Signed-off-by: Dori Medini <[email protected]> * perf(native_blockifier): transaction execution info add serialize (starkware-libs#1315) * feat(fee): adding a slope paramters to the os resources (starkware-libs#1362) * feat(fee): set the resources slope values (starkware-libs#1363) * refactor: make `AccountTransactionContext` hold BlockContext - Rename `AccountTransactionContext` into `TransactionInfo`: i want to use `Context` for something else, and `Account` is a misnomer, since L1Transactions also generate this instance. - Create a new `AccountTransactionContext`, which holds `BlockContext` and `TransactionInfo`: This mirrors `BlockContext`, which holds `BlockInfo` as well as higher level contexts. - Remove all unnecessary `get_account_tx` calls. - Replace all functions that take both `block_context` and `tx_info` with a single `TransactionContext`. - Make `EntryPointExecutionContext` hold an `Arc<TransactionContext>` instead of both a block_context and `tx_info`: previously every entry point cloned the blockContext and generated a new tx_info, now they all share the same (identical) one. * feat: add more constants to`VersionedConstants` - Add gateway constants, these are only for transparency, and aren't used directly by the Blockifier whatsoever. - Pass `validate_max_n_steps` into the blockifier via native_blockifier, to override versioned constants defaults. - Sort json * fix: remove dead code `block_context.rs` (starkware-libs#1423) The module has already taken out of lib.rs in `8ba2662f93999b526ef7fd0a7fc49d1314657184` (making this module dead-code), but the file wasn't actually deleted there. Co-Authored-By: Gilad Chase <[email protected]> * fix: delete dead code block_execution.rs (starkware-libs#1425) Was already removed from lib.rs. Co-Authored-By: Gilad Chase <[email protected]> * chore(execution): enforce nonzero gas prices (starkware-libs#1391) Signed-off-by: Dori Medini <[email protected]> * refactor(execution)!: pre_process_block refactor for full_nodes simulate transaction (starkware-libs#1387) * refactor(native_blockifier): flat fields in bouncerinfo (starkware-libs#1394) * feat: add Starknet OS constants to `VersionedConstants` - unused 1. Currently not using the new consts, just adding the deserialization logic and tests. In upcoming commits this will replace the gas costs in `constants.rs`. The idea is that values inside `cairo_constants` that are json objects, that is, have the form: ```json "step_gas_cost": { foo_cost: x, bar_cost: y, ... } ``` should be parsed as: ``` step_gas_cost = foo_cost*x + bar_cost*y + ..., ``` where {x,y} must be unsigned integers (otherwise an error is thrown), and where {foo_cost, bar_cost,...} must correspond to keys that have already* been parsed in the JSON. Note: JSON standard doesn't enforce order on the keys, but our implementation does; we should consider using a format that ensures order, rather than relying on serde's implementation and `IndexMap`. 2. validate the os costs on creation (except for in tests): under this assumption `get_gas_cost` will _panic_ if given a non-whitelisted gas cost name. 3. hide the two hashmaps inside `VersionedConstants`, they have invariants, set accessors accordingly. * chore(execution): saturate step bound on overflow (starkware-libs#1429) Signed-off-by: Dori Medini <[email protected]> * feat(fee): add signature length to ActualCostBuilder (starkware-libs#1431) * feat(execution): use gas costs only from `VersionedConstants` - Remove from constants module and replace all usages with `VersionedConstants#gas_cost(..)` - Move all comments from the constants module into the const whitelist in `VersionedConstants`. - Add gas cost getter to `EntryPointExecutionContext`, for readability - enclose in closure inside hint_processor.rs for even more brevity. - Move `Transaction::Initial_gas` into `VersionedConstants`: it is now derived from the constants json. - No other logic changes. * feat(fee): add os resources to versioned constants - Move hardcoded os resources json into the versioned constants json, move `OsResources` into into `OsResources` module. - Indent versioned_constants.json at 4. - Delete os_usage.rs: all logic is now called from methods in `VersionedConstants`(todo: extract into submodules, currently just a big module). - Delete os_usage_test.rs: these are not post-deserialize validations of `OsResources`. - sorted versioned_constants (where possible, which is everywhere except for inside os_constants keys). * chore(execution): fix the tests using create_state_changes_for_test for readability and correctness (starkware-libs#1430) * refactor(execution, native_blockifier): make TransactionExecutor.execute() work w/o Py objects (starkware-libs#1414) * refactor(execution, native_blockifier): make TransactionExecutor.finalize() work without Py objects (starkware-libs#1418) * refactor(execution, native_blockifier): decouple BouncerInfo from Python (starkware-libs#1428) * refactor: split InnerCallExecutionError into CallContractExecutionError & LibraryCallExecutionError. Add storage_address to both new types and class_hash to LibraryCallExecutionError (starkware-libs#1432) * feat(execution): moved global max step limit to input validation (starkware-libs#1415) Signed-off-by: Dori Medini <[email protected]> * test(execution): improve covrage of test_count_actual_storage_changes (starkware-libs#1436) * refactor(execution): the struct state changes and state changes count (starkware-libs#1417) * chore(fee): update os resources and fix expected * fix(native_blockifier): fix unused imports (starkware-libs#1442) * chore(execution): consume state_changes on state_changes_count from (starkware-libs#1443) * feat(execution): calculate the syscall resources for every entry point (starkware-libs#1437) * feat(execution): add entry_point_syscall_counter (starkware-libs#1407) * refactor(execution): split get_additional_os_resources (starkware-libs#1411) * feat(execution): add the syscall resources to vm_resources (starkware-libs#1412) * fix(fee): fix doc of usize u128 conversions (starkware-libs#1446) * fix: memory holes tests (starkware-libs#1451) Co-Authored-By: Gilad Chase <[email protected]> * fix: remove unused dep ctor (starkware-libs#1455) Co-Authored-By: Gilad Chase <[email protected]> * refactor(execution): replace StateChangesCount::from with state_changes.count() (starkware-libs#1452) * refactor(transaction): make DeclareTransaction fields public (starkware-libs#1441) * refactor: remove enum VirtualMachineExecutionError (starkware-libs#1453) * fix(native_blockifier): fix build for mac + unused import (starkware-libs#1406) * feat(fee): add ClassInfo struct (starkware-libs#1434) * Merge `main-v0.13.1` into `main` (resolve conflicts). * feat(fee): add GasVector to TransactionExecutionInfo (starkware-libs#1399) * feat(fee): add DA GasVector to TransactionExecutionInfo Signed-off-by: Dori Medini <[email protected]> * chore(fee): rename blob_gas to l1_data_gas Signed-off-by: Dori Medini <[email protected]> * chore(fee): delete unused PyGasVector Signed-off-by: Dori Medini <[email protected]> * refactor(execution): remove syscall_counter from ExecutionResources (starkware-libs#1424) * Update syscall resources (starkware-libs#1459) * fix: os resources (starkware-libs#1465) Co-Authored-By: Gilad Chase <[email protected]> * feat(state): bouncer DA count: define StateWriteKeys (starkware-libs#1461) * chore: alphabetize top level keys in versioned constants (starkware-libs#1466) Co-authored-by: Gilad Chase <[email protected]> * feat(state): bouncer DA count: use StateWriteKeys to count state diff size (starkware-libs#1462) * refactor(execution, native_blockifier): move Bouncer to blockifier crate (starkware-libs#1445) * refactor(transaction): use ClassInfo in Declare transaction (starkware-libs#1456) * feat(fee): add gas cost for calldata bytes (starkware-libs#1426) * chore: bump CI versions (starkware-libs#1473) - Remove the deprecated `actions-rs/toolchain@v1` wherever it is still used. - Bump everything to latest versions. Co-Authored-By: Gilad Chase <[email protected]> * refactor(execution): delete enrty point ExecutionResources (starkware-libs#1447) * fix: limit the syscall emit_event resources, keys, data and number of events (starkware-libs#1463) * fix(transaction): set l1 hanlder payload size to None for non-l1 hanlder txs (bouncer count) (starkware-libs#1470) * feat(fee): charge for signatures per byte (starkware-libs#1474) * Merge `main-v0.13.0-hotfix` into `main-v0.13.1` (resolve conflicts). * feat(execution): round block_number and timestamp for the execution info syscall in validate_mode (starkware-libs#1467) * feat(fee): add gas cost for code bytes (starkware-libs#1475) * feat(fee): add events gas cost (starkware-libs#1458) * chore(execution): increase invoke_tx_max_n_steps (starkware-libs#1477) Co-Authored-By: Gilad Chase <[email protected]> * chore(fee): update vm resource and l2 resource costs (starkware-libs#1479) * chore: upgrade cairo and sn-api versions (starkware-libs#1454) * chore: upgrade cairo and sn-api versions * chore: upgrade cairo and sn-api versions (starkware-libs#1460) * fix: fix cargo.lock - remove cargo update (starkware-libs#1481) * fix: undo cargo update from previous commit 984431a * fix: update cargo.lock to take into account changes in 984431a they wered reverted in previous commit. Co-Authored-By: Gilad Chase <[email protected]> * fix: fix versioned_constants.json * chore(fee): small fixes (starkware-libs#1484) * refactor(fee): moving calculate_tx_gas_usage_vector to ActualCostBuilder (starkware-libs#1478) * Release v0.5.0-rc.1 * refactor(execution): remove fee weights from config (starkware-libs#1487) * fix: update the event limit constants (starkware-libs#1483) * Merge `main-v0.13.0-hotfix` into `main-v0.13.1` (resolve conflicts). * refactor(execution, native_blockifier): move TransactionExecutor to blockifier (starkware-libs#1497) * refactor(state): remove unnecessary derive (starkware-libs#1505) * refactor(execution): move bouncer, block and block_test to blockifier dir (starkware-libs#1502) * feat(fee): add n_events field to BouncerInfo (starkware-libs#1489) * refactor: move the event size limit constants into versioned_constants (starkware-libs#1490) * refactor(transaction): remove public fields, add new function (starkware-libs#1480) * refactor(execution): type of additional_data in test_validate_accounts_tx (starkware-libs#1485) * refactor: move validate_block_number_rounding and validate_timestamp_rounding to versioned_constants (starkware-libs#1506) * test(execution): add get_execution_info scenario to test_validate_accounts_tx (starkware-libs#1486) * test(execution): get_sequencer_address in test_validate_accounts_tx (starkware-libs#1496) * refactor: use versioned_constants function when possible (starkware-libs#1508) * test(execution): get_block_number and get_block_timestamp in test_validate_accounts_tx for Cairo0 (starkware-libs#1512) * chore(fee): Update os resources to include 4844 calculations (starkware-libs#1498) * refactor: replaced default_invoke_tx_args with macro that enforces to explicitly define max_fee (starkware-libs#1510) * feat(fee): calculate n_events field for BouncerInfo in a naive way (starkware-libs#1499) * fix: state trait does not require &mut self (starkware-libs#1325) * fix: state trait does not require &mut self fix: sachedState use interior mutability * chore: remove clippy allow * fix: small review fix * fix: remove to_state_diff from StateApi (starkware-libs#1326) * chore: merge branch main-v0.13.1 into main (resolve conflicts) * feat: add merge_branches script (starkware-libs#1513) * chore: bump compiler version to 2.6.0-rc.1 (starkware-libs#1525) Signed-off-by: Dori Medini <[email protected]> * chore: move validate consts into os constants (starkware-libs#1523) * chore: move validate consts into os constants Had to bump serde_json due to some apparent bug with the recent stable rust. * feat: make 13_1 consts backwards compatible Assign the following defaults for keys missing in versioned_constants files (for example, they are missing in versioned_constants_13_0.json). - EventSizeLimit => max values - L2ResourceGasCosts => 0 values - validate rounding numbers => 1 (to preserve past no-rounding behavior). This required bundling them up in a specialized struct in order to define a custom default as 1 (rather than 0). - Add test for default values: required extracting validation logic of `OsResources` so it won't trigger automatically in tests. Co-Authored-By: Gilad Chase <[email protected]> * chore!: limit pointer width in both crates (starkware-libs#1527) Signed-off-by: Dori Medini <[email protected]> * feat: backwards compatibility for calldata_factor If os resources' inner tx is missing `constant` and `calldata_factor` keys, then: - assume it is a flat `ExecutionResources` instance, and put its contents inside a `constant` key. - initialize calldata_factor as default (all zeros). * feat: add versioned_constants_13_0.json (starkware-libs#1520) Changes between this and the current versioned_constants: - no `event_size_limit` - invoke_tx_max_n_steps is 3_000_000 instead of 4_000_000 - no `l2_resource_gas_costs` - multiple value changes in os_resources - `vm_resource_fee_cost` is X2 for all values - no constants for validate's block number and timestamp rounding No other changes (in particular, os constants is indeed _unchanged_) Co-Authored-By: Gilad Chase <[email protected]> * Merge `main-v0.13.1` into `main` (resolve conflicts). * fix: versioned constants validate (starkware-libs#1537) - validate invocation had a syntax error, which was hidden by the cfg - remove `testing` from the cfg, since we all compile with `testing` during development, and it's just not what we want. Co-Authored-By: Gilad Chase <[email protected]> * fix: update the tx event limit constants (starkware-libs#1517) * chore: release 0.5.0-rc.2: 13_0.json support * fix: generate_starknet_os_resources python target fix (starkware-libs#1541) * No conflicts in main-v0.13.1 -> main merge, this commit is for any change needed to pass the CI. * fix: generate_starknet_os_resources python target fix (starkware-libs#1548) * refactor: remove some magic numbers from tests (starkware-libs#1547) * fix!: update max_contract_bytecode_size to 81k (starkware-libs#1549) * chore: add merge_status.py script (starkware-libs#1543) Signed-off-by: Dori Medini <[email protected]> * chore: merge branch main-v0.13.1 into main (resolve conflicts) * ci: advance setup-python action version (starkware-libs#1555) * refactor(native_blockifier): rename l1_gas_amount to gas_weight in bouncerInfo (starkware-libs#1524) * chore: release v0.5.0-rc.3 * chore: panic if u128_from_usize fails (starkware-libs#1522) Signed-off-by: Dori Medini <[email protected]> * refactor: make StateError::UndeclaredClassHash a one-line error (starkware-libs#1563) Change previous error which prints out as: ``` Class with hash ClassHash( StarkFelt( "0x00000000000000000000000000000000000000000000000000000000000004d2", ), ) is not declared. ``` into: ``` Class with hash 0x00000000000000000000000000000000000000000000000000000000000004d2 is not declared. ``` * test(fee): test get_message_segment_length function (starkware-libs#1471) * refactor: add BlockWeights for the future bouncer (starkware-libs#1444) * refactor: remove f64 usage at blockifier (starkware-libs#1519) * fix: unwrap called on u128 (starkware-libs#1570) Signed-off-by: Dori Medini <[email protected]> * test: use FeatureContract in create_test_state and tests which uses it (starkware-libs#1556) * No conflicts in main-v0.13.1 -> main merge, this commit is for any change needed to pass the CI. * chore: remove final f64s (starkware-libs#1574) Signed-off-by: Dori Medini <[email protected]> * chore: remove some 'as' conversions and enforce no 'as' conversions (starkware-libs#1575) * chore: remove final f64s Signed-off-by: Dori Medini <[email protected]> * chore: remove some 'as' conversions and enforce no 'as' conversions Signed-off-by: Dori Medini <[email protected]> * Restore workflow * Rename ci * Add commit lint rules * nightly format * update .env * Test global env and composite action * attemp fix to composite action * Minor fix * Modify .github structure * Add composite action to jobs? * Minor yaml fix * Fix compilation errors * WIP * Storage_read_write_gas * add tests for vm & native * modify test_get_execution_info * Review tests * rename syscalls_test.rs -> syscall_tests.rs * Fix minor compilation bug * Update dependencies --------- Signed-off-by: Dori Medini <[email protected]> Co-authored-by: Dori Medini <[email protected]> Co-authored-by: Gilad Chase <[email protected]> Co-authored-by: giladchase <[email protected]> Co-authored-by: Lior Goldberg <[email protected]> Co-authored-by: liorgold2 <[email protected]> Co-authored-by: Arnon Hod <[email protected]> Co-authored-by: Elin Tulchinsky <[email protected]> Co-authored-by: OriStarkware <[email protected]> Co-authored-by: Ayelet Zilber <[email protected]> Co-authored-by: zuphitf <[email protected]> Co-authored-by: aner-starkware <[email protected]> Co-authored-by: Noa Oved <[email protected]> Co-authored-by: Yoni <[email protected]> Co-authored-by: YaelD <[email protected]> Co-authored-by: mohammad-starkware <[email protected]> Co-authored-by: barak-b-starkware <[email protected]> Co-authored-by: Lucas @ StarkWare <[email protected]> Co-authored-by: dafnamatsry <[email protected]> Co-authored-by: avi-starkware <[email protected]> Co-authored-by: Tzahi <[email protected]> Co-authored-by: nimrod-starkware <[email protected]> Co-authored-by: Timothée Delabrouille <[email protected]> Co-authored-by: Barak <[email protected]> Co-authored-by: Yonatan Iluz <[email protected]> Co-authored-by: Rodrigo <[email protected]>
This change is