Skip to content

Commit adfcc8f

Browse files
starknet_os: load proof facts from invoke transaction in the os (#10749)
1 parent fb32b6e commit adfcc8f

File tree

63 files changed

+222
-6
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+222
-6
lines changed

crates/apollo_starknet_os_program/src/cairo/starkware/starknet/core/os/execution/execute_transactions.cairo

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,10 @@ func execute_invoke_function_transaction{
482482
local account_deployment_data: felt* = cast(
483483
nondet %{ segments.gen_arg(tx.account_deployment_data) %}, felt*
484484
);
485+
local proof_facts_size;
486+
local proof_facts: felt*;
487+
%{ TxProofFacts %}
488+
485489
let poseidon_ptr = builtin_ptrs.selectable.poseidon;
486490
// TODO(Meshi): use the invoke transaction proof facts once implemented.
487491
with poseidon_ptr {
@@ -502,14 +506,13 @@ func execute_invoke_function_transaction{
502506

503507
// Write the transaction info and complete the ExecutionInfo struct.
504508
tempvar tx_info = tx_execution_info.tx_info;
505-
// TODO(Meshi): use the invoke transaction proof facts once implemented.
506509
fill_account_tx_info(
507510
transaction_hash=transaction_hash,
508511
common_tx_fields=common_tx_fields,
509512
account_deployment_data_size=account_deployment_data_size,
510513
account_deployment_data=account_deployment_data,
511-
proof_facts_size=0,
512-
proof_facts=cast(0, felt*),
514+
proof_facts_size=proof_facts_size,
515+
proof_facts=proof_facts,
513516
tx_info_dst=tx_info,
514517
deprecated_tx_info_dst=tx_execution_context.deprecated_tx_info,
515518
);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"os": "0x6d4d7cc0d4fce1cfd9236e3cd173e7ea44c8d0acdbfca8b5c8c579df0443740",
2+
"os": "0x55015a0e25ba9a0064c6fb6c78d28a3e47eae9833cc101ad45a125e3261ce63",
33
"aggregator": "0x9b8449bd89d58c92904972e8be142e87b00edc38c19e0a331c30790771653",
44
"aggregator_with_prefix": "0x606fbb6fd6b4d56443467ac666fba1dc41e291f2faf3729aff708318d193f63"
55
}

crates/starknet_api/src/executable_transaction.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use crate::transaction::fields::{
2020
ContractAddressSalt,
2121
Fee,
2222
PaymasterData,
23+
ProofFacts,
2324
Tip,
2425
TransactionSignature,
2526
ValidResourceBounds,
@@ -327,7 +328,8 @@ impl InvokeTransaction {
327328
(nonce_data_availability_mode, DataAvailabilityMode),
328329
(fee_data_availability_mode, DataAvailabilityMode),
329330
(paymaster_data, PaymasterData),
330-
(account_deployment_data, AccountDeploymentData)
331+
(account_deployment_data, AccountDeploymentData),
332+
(proof_facts, ProofFacts)
331333
);
332334
implement_getter_calls!((tx_hash, TransactionHash));
333335

crates/starknet_api/src/transaction.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,8 @@ impl InvokeTransaction {
723723
(nonce_data_availability_mode, DataAvailabilityMode),
724724
(fee_data_availability_mode, DataAvailabilityMode),
725725
(paymaster_data, PaymasterData),
726-
(account_deployment_data, AccountDeploymentData)
726+
(account_deployment_data, AccountDeploymentData),
727+
(proof_facts, ProofFacts)
727728
);
728729

729730
pub fn nonce(&self) -> Nonce {

crates/starknet_os/src/hints/enum_definition.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ use crate::hints::hint_implementation::execution::implementation::{
123123
tx_nonce_data_availability_mode,
124124
tx_paymaster_data,
125125
tx_paymaster_data_len,
126+
tx_proof_facts,
126127
tx_tip,
127128
tx_version,
128129
write_old_block_to_storage,
@@ -1415,6 +1416,7 @@ ids.contract_class_component_hashes = segments.gen_arg(class_component_hashes)"#
14151416
tx_account_deployment_data,
14161417
"memory[ap] = to_felt_or_relocatable(segments.gen_arg(tx.account_deployment_data))"
14171418
),
1419+
(TxProofFacts, tx_proof_facts, "TxProofFacts"),
14181420
(
14191421
GenSignatureArg,
14201422
gen_signature_arg,

crates/starknet_os/src/hints/hint_implementation/execution/implementation.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use crate::hints::hint_implementation::execution::utils::{
3030
extract_actual_retdata,
3131
get_account_deployment_data,
3232
get_calldata,
33+
get_proof_facts,
3334
set_state_entry,
3435
};
3536
use crate::hints::nondet_offsets::insert_nondet_hint_value;
@@ -524,6 +525,33 @@ pub(crate) fn tx_account_deployment_data<S: StateReader>(
524525
Ok(())
525526
}
526527

528+
pub(crate) fn tx_proof_facts<S: StateReader>(
529+
hint_processor: &mut SnosHintProcessor<'_, S>,
530+
HintArgs { vm, ids_data, ap_tracking, .. }: HintArgs<'_>,
531+
) -> OsHintResult {
532+
let proof_facts: Vec<_> = get_proof_facts(hint_processor.get_current_execution_helper()?)?
533+
.0
534+
.iter()
535+
.map(MaybeRelocatable::from)
536+
.collect();
537+
let proof_facts_base = vm.gen_arg(&proof_facts)?;
538+
insert_value_from_var_name(
539+
Ids::ProofFacts.into(),
540+
proof_facts_base,
541+
vm,
542+
ids_data,
543+
ap_tracking,
544+
)?;
545+
insert_value_from_var_name(
546+
Ids::ProofFactsSize.into(),
547+
proof_facts.len(),
548+
vm,
549+
ids_data,
550+
ap_tracking,
551+
)?;
552+
Ok(())
553+
}
554+
527555
pub(crate) fn gen_signature_arg<S: StateReader>(
528556
hint_processor: &mut SnosHintProcessor<'_, S>,
529557
HintArgs { ids_data, ap_tracking, vm, .. }: HintArgs<'_>,

crates/starknet_os/src/hints/hint_implementation/execution/utils.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use starknet_api::transaction::fields::{
1717
valid_resource_bounds_as_felts,
1818
AccountDeploymentData,
1919
Calldata,
20+
ProofFacts,
2021
ResourceAsFelts,
2122
ValidResourceBounds,
2223
};
@@ -93,6 +94,18 @@ pub(crate) fn get_account_deployment_data<S: StateReader>(
9394
}
9495
}
9596

97+
pub(crate) fn get_proof_facts<S: StateReader>(
98+
execution_helper: &OsExecutionHelper<'_, S>,
99+
) -> Result<ProofFacts, OsHintError> {
100+
let tx = execution_helper.tx_tracker.get_account_tx()?;
101+
match tx {
102+
AccountTransaction::Invoke(invoke) => Ok(invoke.proof_facts()),
103+
AccountTransaction::DeployAccount(_) | AccountTransaction::Declare(_) => {
104+
Err(OsHintError::UnexpectedTxType(tx.tx_type()))
105+
}
106+
}
107+
}
108+
96109
pub(crate) fn get_calldata<'a, S: StateReader>(
97110
execution_helper: &OsExecutionHelper<'a, S>,
98111
) -> Result<&'a Calldata, OsHintError> {

crates/starknet_os/src/hints/vars.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,8 @@ define_string_enum! {
237237
(PrevAliasesStateEntry),
238238
(PrevRoot),
239239
(PrevValue),
240+
(ProofFacts),
241+
(ProofFactsSize),
240242
(PublicKeys),
241243
(SnPrivateKeys),
242244
(RangeCheck96Ptr, "range_check96_ptr"),

crates/starknet_os_flow_tests/resources/hint_coverage/declare_deploy_scenario_n_blocks_1_use_kzg_da_false_full_output_false.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,9 @@
305305
{
306306
"OsHint": "TxAccountDeploymentData"
307307
},
308+
{
309+
"OsHint": "TxProofFacts"
310+
},
308311
{
309312
"OsHint": "GenSignatureArg"
310313
},

crates/starknet_os_flow_tests/resources/hint_coverage/declare_deploy_scenario_n_blocks_1_use_kzg_da_false_full_output_true.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,9 @@
284284
{
285285
"OsHint": "TxAccountDeploymentData"
286286
},
287+
{
288+
"OsHint": "TxProofFacts"
289+
},
287290
{
288291
"OsHint": "GenSignatureArg"
289292
},

0 commit comments

Comments
 (0)