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