aztec_pxe/execution/
execution_result.rs1use acir::native_types::WitnessMap;
8use acir::FieldElement;
9
10use aztec_core::kernel_types::{
11 CallContext, CountedContractClassLog, NoteAndSlot, ScopedNoteHash, ScopedNullifier,
12 ScopedReadRequest,
13};
14use aztec_core::tx::HashedValues;
15use aztec_core::types::{AztecAddress, Fr};
16
17#[derive(Debug, Clone)]
21pub struct PrivateCallExecutionResult {
22 pub acir: Vec<u8>,
24 pub vk: Vec<u8>,
26 pub partial_witness: WitnessMap<FieldElement>,
28 pub contract_address: AztecAddress,
30 pub call_context: CallContext,
32 pub return_values: Vec<Fr>,
34
35 pub new_notes: Vec<NoteAndSlot>,
38 pub note_hash_nullifier_counter_map: std::collections::HashMap<u32, u32>,
40 pub offchain_effects: Vec<Vec<Fr>>,
42 pub pre_tags: Vec<Fr>,
44 pub nested_execution_results: Vec<PrivateCallExecutionResult>,
46 pub contract_class_logs: Vec<CountedContractClassLog>,
48
49 pub note_hashes: Vec<ScopedNoteHash>,
52 pub nullifiers: Vec<ScopedNullifier>,
54 pub note_hash_read_requests: Vec<ScopedReadRequest>,
56 pub nullifier_read_requests: Vec<ScopedReadRequest>,
58 pub private_logs: Vec<PrivateLogData>,
60 pub public_call_requests: Vec<PublicCallRequestData>,
62 pub public_teardown_call_request: Option<PublicCallRequestData>,
64
65 pub start_side_effect_counter: u32,
67 pub end_side_effect_counter: u32,
69 pub min_revertible_side_effect_counter: u32,
71}
72
73impl Default for PrivateCallExecutionResult {
74 fn default() -> Self {
75 Self {
76 acir: Vec::new(),
77 vk: Vec::new(),
78 partial_witness: WitnessMap::default(),
79 contract_address: AztecAddress::zero(),
80 call_context: CallContext::default(),
81 return_values: Vec::new(),
82 new_notes: Vec::new(),
83 note_hash_nullifier_counter_map: std::collections::HashMap::new(),
84 offchain_effects: Vec::new(),
85 pre_tags: Vec::new(),
86 nested_execution_results: Vec::new(),
87 contract_class_logs: Vec::new(),
88 note_hashes: Vec::new(),
89 nullifiers: Vec::new(),
90 note_hash_read_requests: Vec::new(),
91 nullifier_read_requests: Vec::new(),
92 private_logs: Vec::new(),
93 public_call_requests: Vec::new(),
94 public_teardown_call_request: None,
95 start_side_effect_counter: 0,
96 end_side_effect_counter: 0,
97 min_revertible_side_effect_counter: 0,
98 }
99 }
100}
101
102#[derive(Debug, Clone)]
106pub struct PrivateExecutionResult {
107 pub entrypoint: PrivateCallExecutionResult,
109 pub first_nullifier: Fr,
111 pub expiration_timestamp: u64,
113 pub public_function_calldata: Vec<HashedValues>,
115}
116
117impl PrivateExecutionResult {
118 pub fn iter_all_calls(&self) -> Vec<&PrivateCallExecutionResult> {
120 let mut results = Vec::new();
121 Self::collect_calls(&self.entrypoint, &mut results);
122 results
123 }
124
125 fn collect_calls<'a>(
126 call: &'a PrivateCallExecutionResult,
127 out: &mut Vec<&'a PrivateCallExecutionResult>,
128 ) {
129 out.push(call);
130 for nested in &call.nested_execution_results {
131 Self::collect_calls(nested, out);
132 }
133 }
134
135 pub fn all_note_hashes(&self) -> Vec<&ScopedNoteHash> {
137 self.iter_all_calls()
138 .into_iter()
139 .flat_map(|c| c.note_hashes.iter())
140 .collect()
141 }
142
143 pub fn all_nullifiers(&self) -> Vec<&ScopedNullifier> {
145 self.iter_all_calls()
146 .into_iter()
147 .flat_map(|c| c.nullifiers.iter())
148 .collect()
149 }
150
151 pub fn all_note_hash_read_requests(&self) -> Vec<&ScopedReadRequest> {
153 self.iter_all_calls()
154 .into_iter()
155 .flat_map(|c| c.note_hash_read_requests.iter())
156 .collect()
157 }
158
159 pub fn all_nullifier_read_requests(&self) -> Vec<&ScopedReadRequest> {
161 self.iter_all_calls()
162 .into_iter()
163 .flat_map(|c| c.nullifier_read_requests.iter())
164 .collect()
165 }
166
167 pub fn all_private_logs(&self) -> Vec<&PrivateLogData> {
169 self.iter_all_calls()
170 .into_iter()
171 .flat_map(|c| c.private_logs.iter())
172 .collect()
173 }
174
175 pub fn all_contract_class_logs_sorted(&self) -> Vec<&CountedContractClassLog> {
177 let mut logs: Vec<&CountedContractClassLog> = self
178 .iter_all_calls()
179 .into_iter()
180 .flat_map(|c| c.contract_class_logs.iter())
181 .collect();
182 logs.sort_by_key(|l| l.counter);
183 logs
184 }
185
186 pub fn all_public_call_requests(&self) -> Vec<&PublicCallRequestData> {
188 self.iter_all_calls()
189 .into_iter()
190 .flat_map(|c| c.public_call_requests.iter())
191 .collect()
192 }
193
194 pub fn get_teardown_call_request(&self) -> Option<&PublicCallRequestData> {
196 self.iter_all_calls()
197 .into_iter()
198 .find_map(|c| c.public_teardown_call_request.as_ref())
199 }
200
201 pub fn all_note_hash_nullifier_counter_maps(&self) -> std::collections::HashMap<u32, u32> {
203 let mut map = std::collections::HashMap::new();
204 for call in self.iter_all_calls() {
205 map.extend(&call.note_hash_nullifier_counter_map);
206 }
207 map
208 }
209}
210
211#[derive(Debug, Clone)]
213pub struct PrivateLogData {
214 pub fields: Vec<Fr>,
216 pub emitted_length: u32,
218 pub note_hash_counter: u32,
220 pub counter: u32,
222 pub contract_address: AztecAddress,
224}
225
226#[derive(Debug, Clone)]
228pub struct PublicCallRequestData {
229 pub contract_address: AztecAddress,
231 pub msg_sender: AztecAddress,
233 pub is_static_call: bool,
235 pub calldata_hash: Fr,
237 pub counter: u32,
239}