use crate::{CallStack, Registers, Stack, compute_function_id, stack::Address, trace::TranslationAssignment};
use aleo_std::prelude::{finish, lap, timer};
use console::{
account::Field,
network::prelude::*,
program::{Identifier, InputID, Literal, OutputID, Plaintext, ProgramID, Register, Request, Value, ValueType},
types::{Group, U16},
};
use snarkvm_synthesizer_error::*;
use snarkvm_synthesizer_program::{
Call,
CallDynamic,
CallOperator,
Operand,
RegistersCircuit as _,
RegistersSigner as _,
RegistersTrait as _,
StackTrait,
};
use snarkvm_synthesizer_snark::ProvingKey;
use snarkvm_utilities::dev_eprintln;
use std::sync::Arc;
mod dynamic;
mod standard;
pub trait CallTrait<N: Network> {
fn evaluate<A: circuit::Aleo<Network = N>, R: CryptoRng + Rng>(
&self,
stack: &Stack<N>,
registers: &mut Registers<N, A>,
rng: &mut R,
) -> Result<(), CallEvalError>;
fn execute<A: circuit::Aleo<Network = N>, R: CryptoRng + Rng>(
&self,
stack: &Stack<N>,
registers: &mut Registers<N, A>,
rng: &mut R,
) -> Result<(), CallExecError>;
}