diff --git a/synthesizer/process/src/stack/execute.rs b/synthesizer/process/src/stack/execute.rs index 9b91c95c5..8925817be 100644 --- a/synthesizer/process/src/stack/execute.rs +++ b/synthesizer/process/src/stack/execute.rs @@ -48,12 +48,16 @@ impl StackExecute for Stack { use circuit::Eject; - // Set the transaction signer. - registers.set_signer(signer.eject_value()); + // If the circuit is in execute mode, then store the console input. + if let CallStack::Execute(..) = registers.call_stack() { + // Set the transaction signer. + registers.set_signer(signer.eject_value()); + // Set the transaction caller. + registers.set_caller(caller.eject_value()); + } + // Set the transition signer, as a circuit. registers.set_signer_circuit(signer); - // Set the transaction caller. - registers.set_caller(caller.eject_value()); // Set the transition caller, as a circuit. registers.set_caller_circuit(caller); // Set the transition view key, as a circuit. @@ -219,10 +223,16 @@ impl StackExecute for Stack { // Set the root tvk, from a parent request or the current request. // inject the `root_tvk` as `Mode::Private`. if let Some(root_tvk) = root_tvk { - registers.set_root_tvk(root_tvk); + // If the circuit is in execute mode, then store the console input. + if let CallStack::Execute(..) = registers.call_stack() { + registers.set_root_tvk(root_tvk); + } registers.set_root_tvk_circuit(circuit::Field::::new(circuit::Mode::Private, root_tvk)); } else { - registers.set_root_tvk(*console_request.tvk()); + // If the circuit is in execute mode, then store the console input. + if let CallStack::Execute(..) = registers.call_stack() { + registers.set_root_tvk(*console_request.tvk()); + } registers.set_root_tvk_circuit(circuit::Field::::new(circuit::Mode::Private, *console_request.tvk())); } @@ -246,18 +256,20 @@ impl StackExecute for Stack { A::assert(request.verify(&input_types, &tpk, root_tvk, is_root)); lap!(timer, "Verify the circuit request"); - // Set the transition signer. - registers.set_signer(*console_request.signer()); + // If the circuit is in execute mode, then store the console input. + if let CallStack::Execute(..) = registers.call_stack() { + // Set the transition signer. + registers.set_signer(*console_request.signer()); + // Set the transition caller. + registers.set_caller(caller.eject_value()); + // Set the transition view key. + registers.set_tvk(*console_request.tvk()); + } + // Set the transition signer, as a circuit. registers.set_signer_circuit(request.signer().clone()); - - // Set the transition caller. - registers.set_caller(caller.eject_value()); // Set the transition caller, as a circuit. registers.set_caller_circuit(caller); - - // Set the transition view key. - registers.set_tvk(*console_request.tvk()); // Set the transition view key, as a circuit. registers.set_tvk_circuit(request.tvk().clone()); diff --git a/synthesizer/tests/tests/vm/execute_and_finalize/self_caller_and_signer_in_closure.aleo b/synthesizer/tests/tests/vm/execute_and_finalize/self_caller_and_signer_in_closure.aleo index 20f053b90..7548fe791 100644 --- a/synthesizer/tests/tests/vm/execute_and_finalize/self_caller_and_signer_in_closure.aleo +++ b/synthesizer/tests/tests/vm/execute_and_finalize/self_caller_and_signer_in_closure.aleo @@ -27,4 +27,4 @@ function dummy: input r0 as u32.public; input r1 as u32.private; add r0 r1 into r2; - output r2 as u32.private; + assert.eq self.signer self.caller;