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