pub fn execute<Mode: ExecutionMode>(
protocol_config: &ProtocolConfig,
metrics: Arc<LimitsMetrics>,
vm: &MoveVM,
state_view: &mut dyn ExecutionState,
tx_context: Rc<RefCell<TxContext>>,
gas_charger: &mut GasCharger,
pt: ProgrammableTransaction,
trace_builder_opt: &mut Option<MoveTraceBuilder>,
) -> ResultWithTimings<Mode::ExecutionResults, ExecutionError>