\subsection{Concordia Pinner} \label{subsection:4-3-4-concordia-pinner-service}

\subsubsection{Περιγραφή - Στόχοι υπηρεσίας}

Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application), η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη σε γλώσσα προγραμματισμού JavaScript, ενώ η αρχιτεκτονική της παρουσιάζεται στο σχήμα \ref{figure:4-3-concordia-pinner-architecture}.

\vspace{.5\baselineskip}

\begin{figure}[H]
    \centering
    \includegraphics[width=.75\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.4.concordia-pinner-architecture.png}
    \caption{Αρχιτεκτονική υπηρεσίας Concordia Pinner}
    \label{figure:4-3-concordia-pinner-architecture}
\end{figure}

Αυτή η υπηρεσία υλοποιήθηκε για την εγγύηση της διαθεσιμότητας του περιεχομένου του συστήματος που αποθηκεύεται στο IPFS (τίτλοι θεμάτων, περιεχόμενο μηνυμάτων και άλλα). Όπως προαναφέρθηκε στην ενότητα \ref{section:2-7-ipfs}, το περιεχόμενο που αναρτούν οι χρήστες στο IPFS πρέπει να καρφιτσώνεται από άλλους χρήστες ή αυτόνομες εφαρμογές, όπως την υπηρεσία Concordia Pinner, ώστε να παραμένει σίγουρα διαθέσιμο. Αν το περιεχόμενο δεν καρφιτσωθεί, τότε θα είναι διαθέσιμο στους υπόλοιπους χρήστες μόνο από
τον δημιουργό του και, έτσι, αν αυτός δεν είναι ενεργός στο δίκτυο το περιεχόμενο θα είναι αδύνατο να ανακτηθεί.

Η υπηρεσία συνδέεται στο blockchain από όπου παρακολουθεί την κατάσταση του συστήματος και "ακούει" για νέους χρήστες, θέματα, μηνύματα και ψηφοφορίες. Η υπηρεσία συνδέεται επίσης στο IPFS και όταν δημιουργείται νέο περιεχόμενο στο σύστημα το καρφιτσώνει αυτόματα. Με αυτόν τον τρόπο, διατηρώντας την υπηρεσία πάντα διαθέσιμη (για παράδειγμα εκτελώντας τη σε περιβάλλον διακομιστή), διαβεβαιώνεται η διαθεσιμότητα του περιεχομένου.

\subsubsection{Διανομή}

Η υπηρεσία Concordia Pinner γίνεται διαθέσιμη για χρήση ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub\footnote{\url{https://hub.docker.com/r/ecentrics/concordia-pinner}}. Κατά την εκτέλεση της εικόνας οι χρήστες μπορούν, μέσω μεταβλητών περιβάλλοντος, να ορίσουν παραμέτρους της υπηρεσίας, όπως τη διεύθυνση του εξυπηρετητή (host location), τη διεύθυνση του blockchain, τις διαδρομές αποθήκευσης των δεδομένων στο σύστημα και τις τοποθεσίες των υπηρεσιών Rendezvous Server και Contracts Provider.