\section{Μεθοδολογία της διπλωματικής}\label{section:1-5-methodology}
\section{Μεθοδολογία της διπλωματικής}\label{section:1-5-methodology}
Έναυσμα της παρούσας εργασίας αποτέλεσε η παρατηρήση της αρχιτεκτονικής δομής των σύγχρονων διαδικτυακών εφαρμογών και η ανάγκη διερεύνησης των επιπτώσεών της στον τελικό χρήστη.
Έναυσμα της παρούσας εργασίας αποτέλεσε η παρατήρηση της αρχιτεκτονικής δομής των σύγχρονων διαδικτυακών εφαρμογών και η ανάγκη διερεύνησης των επιπτώσεών της στον τελικό χρήστη.
Αρχικά, ορίστηκε με σαφήνεια το πρόβλημα (\hyperref[section:1-3-problem-definition]{ενότητα 1.3}) και ο στόχος της διπλωματικής (\hyperref[section:1-4-thesis-goal]{ενότητα 1.4}), λαμβάνοντας την απόφαση να περιοριστεί στον τομέα των μέσων κοινωνικής δικτύωσης και της ψηφιακής δημοκρατίας.
Αρχικά, ορίστηκε με σαφήνεια το πρόβλημα (\hyperref[section:1-3-problem-definition]{ενότητα 1.3}) και ο στόχος της διπλωματικής (\hyperref[section:1-4-thesis-goal]{ενότητα 1.4}), λαμβάνοντας την απόφαση να περιοριστεί στον τομέα των μέσων κοινωνικής δικτύωσης και της ψηφιακής δημοκρατίας.
Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά διατυπώνονται στα \hyperref[toc]{Περιεχόμενα}.
Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά διατυπώνονται στα \hyperref[toc]{\textbf{Περιεχόμενα}}.
Πιο συγκεκριμένα:
Πιο συγκεκριμένα:
\begin{itemize}
\begin{itemize}
\item Το εισαγωγικό \hyperref[chapter:1-introduction]{\textbf{Κεφάλαιο 1}} έχει ως κεντρικά θέματα την ανάλυση του όρου "αποκέντρωση" (\ref{section:1-2-decentralization}), την περιγραφή του προβλήματος (\ref{section:1-3-problem-definition}), καθώς και την παρουσίαση του στόχου (\ref{section:1-4-thesis-goal}) και της μεθοδολογίας (\ref{section:1-5-methodology}) της εργασίας .
\item Το εισαγωγικό \hyperref[chapter:1-introduction]{\textbf{Κεφάλαιο 1}} έχει ως κεντρικά θέματα την ανάλυση του όρου "αποκέντρωση" (\ref{section:1-2-decentralization}), την περιγραφή του προβλήματος (\ref{section:1-3-problem-definition}), καθώς και την παρουσίαση του στόχου (\ref{section:1-4-thesis-goal}) και της μεθοδολογίας (\ref{section:1-5-methodology}) της εργασίας .
\item Το \hyperref[chapter:2-theoretical-background]{\textbf{Κεφάλαιο 2}} σχετίζεται με το θεωρητικό υπόβαθρο, το οποίο περιλαμβάνει όλες τις έννοιες που είναι απαραίτητες για την κατανόηση των διαδικασιών της σχεδίασης και της υλοποίησης της εφαρμογής. Απαρτίζεται από επτά ενότητες, στις οποίες αναλύονται σε επαρκή λεπτομέρεια οι συναρτήσεις κατακερματισμού (\ref{section:2-1-hash-functions}), η ασύμμετρη κρυπτογραφία (\ref{section:2-2-asymmetric-cryptography}), τα δένδρα Merkle (\ref{section:2-3-merkle-trees}), τα δίκτυα ομότιμων κόμβων (\ref{section:2-4-p2p-networks}), το blockchain (\ref{section:2-5-blockchain}), το Ethereum (\ref{section:2-6-ethereum}) και το IPFS (\ref{section:2-7-ipfs}).
\item Το \hyperref[chapter:2-theoretical-background]{\textbf{Κεφάλαιο 2}} σχετίζεται με το θεωρητικό υπόβαθρο, το οποίο περιλαμβάνει όλες τις έννοιες που είναι απαραίτητες για την κατανόηση των διαδικασιών της σχεδίασης και της υλοποίησης της εφαρμογής. Απαρτίζεται από επτά ενότητες, στις οποίες αναλύονται σε επαρκή λεπτομέρεια οι συναρτήσεις κατακερματισμού (\ref{section:2-1-hash-functions}), η ασύμμετρη κρυπτογραφία (\ref{section:2-2-asymmetric-cryptography}), τα δένδρα Merkle (\ref{section:2-3-merkle-trees}), τα δίκτυα ομότιμων κόμβων (\ref{section:2-4-p2p-networks}), το blockchain (\ref{section:2-5-blockchain}), το Ethereum (\ref{section:2-6-ethereum}) και το IPFS (\ref{section:2-7-ipfs}).
\item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} περιγράφεται η διαδικασία της σχεδίασης της εφαρμογής. Συγκεκριμένα, ξεκινάει με τη σύλληψη της ιδέας (\ref{section:3-1-idea-conception}),την επιλογή της τεχνολογικής στοίβας (\ref{section:3-2-technology-stack}) και την παρουσίαση της μεθοδολογίας της σχεδίασης (\ref{section:3-3-design-methodology}). Συνεχίζει με τον ορισμό των κατηγοριών των χρηστών (\ref{section:3-4-user-categories}), των απαιτήσεων λογισμικού (\ref{section:3-5-software-requirements}) και των σεναριών χρήσης (\ref{section:3-6-use-cases}). Κλείνει με τις ενότητες της αρχιτεκτονική σχεδίασης (\ref{section:3-7-architecture-design}) και της
\item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} περιγράφεται η διαδικασία της σχεδίασης της εφαρμογής. Συγκεκριμένα, ξεκινάει με τη σύλληψη της ιδέας (\ref{section:3-1-idea-conception}),την επιλογή της τεχνολογικής στοίβας (\ref{section:3-2-technology-stack}) και την παρουσίαση της μεθοδολογίας της σχεδίασης (\ref{section:3-3-design-methodology}). Συνεχίζει με τον ορισμό των κατηγοριών των χρηστών (\ref{section:3-4-user-categories}), των απαιτήσεων λογισμικού (\ref{section:3-5-software-requirements}) και των σεναρίων χρήσης (\ref{section:3-6-use-cases}). Κλείνει με τις ενότητες της αρχιτεκτονική σχεδίασης (\ref{section:3-7-architecture-design}) και της
προδιαγραφής της μεθόδου υλοποίησης και του χρονοπρογραμματισμού (\ref{section:3-8-implementation-methodology-specification}).
προδιαγραφής της μεθόδου υλοποίησης και του χρονοπρογραμματισμού (\ref{section:3-8-implementation-methodology-specification}).
\item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} αναλύεται η διαδικασία υλοποίησης της πιλοτικής εφαρμογής Concordia. Αρχικά γίνεται μία περιγραφή της μεθοδολογίας που ακολουθήθηκε (\ref{subsection:4-1-implementation-methodology}), καθώς και των τεχνολογιών που χρησιμοποιήθηκαν (\ref{subsection:4-2-implementation-technology-stack}). Στην ενότητα \ref{section:4-3-implementation-architecture} παρουσιάζεται η αρχιτεκτονική του περιβάλλοντος ανάπτυξης και της εφαρμογής, μέσω της ανάλυσης των συνθετικών τους στοιχείων και του τρόπου που εκείνα διασυνδέονται. Έπειτα, επισημαίνονται τα προβλήματα που προέκυψαν κατά την ανάπτυξη (\ref{section:4-4-problems-faced}) και, τελικά, παρουσιάζονται τα υλοποιημένα χαρακτηριστικά της εφαρμογής, καθώς και οι διαφορές ανάμεσα στον σχεδιασμό και την υλοποίηση (\ref{section:4-5-implemented-parts}).
\item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} αναλύεται η διαδικασία υλοποίησης της πιλοτικής εφαρμογής Concordia. Αρχικά γίνεται μία περιγραφή της μεθοδολογίας που ακολουθήθηκε (\ref{subsection:4-1-implementation-methodology}), καθώς και των τεχνολογιών που χρησιμοποιήθηκαν (\ref{subsection:4-2-implementation-technology-stack}). Στην ενότητα \ref{section:4-3-implementation-architecture} παρουσιάζεται η αρχιτεκτονική του περιβάλλοντος ανάπτυξης και της εφαρμογής, μέσω της ανάλυσης των συνθετικών τους στοιχείων και του τρόπου που εκείνα διασυνδέονται. Έπειτα, επισημαίνονται τα προβλήματα που προέκυψαν κατά την ανάπτυξη (\ref{section:4-4-problems-faced}) και, τελικά, παρουσιάζονται τα υλοποιημένα χαρακτηριστικά της εφαρμογής, καθώς και οι διαφορές ανάμεσα στον σχεδιασμό και την υλοποίηση (\ref{section:4-5-implemented-parts}).
\item Στο \hyperref[chapter:5-conclusions-open-areas]{\textbf{Κεφάλαιο 5}} διατυπώνονται τα συμπεράσματα της εργασίας (\ref{section:5-1-conclusions}) και προτείνονται ορισμένες πιθανές μελλοντικές επεκτάσεις (\ref{section:5-2-open-areas}).
\item Στο \hyperref[chapter:5-conclusions-open-areas]{\textbf{Κεφάλαιο 5}} διατυπώνονται τα συμπεράσματα της εργασίας (\ref{section:5-1-conclusions}) και προτείνονται ορισμένες πιθανές μελλοντικές επεκτάσεις (\ref{section:5-2-open-areas}).
@ -37,7 +37,7 @@ ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι
Επιπλέον, ο κώδικάς τους ενεργοποιείται μονάχα όταν δεχθούν μία έγκυρη συναλλαγή από κάποιον άλλον λογαριασμό (είτε εξωτερικής κατοχής, είτε συμβολαίου). Η συναλλαγή αυτή εμπεριέχει, πέρα από το απαιτούμενο fee, ένα συνοδευτικό μήνυμα με πληροφορίες σχετικές με τη συνάρτηση που πρέπει να εκτελεστεί. Η δε συνάρτηση μπορεί να πραγματοποιεί ποικίλες διαφορετικές ενέργειες, όπως την ανάγνωση και την εγγραφή στην εσωτερική αποθήκευση, την πραγματοποίηση νέων συναλλαγών, ή, ακόμα, τη δημιουργία νέων συμβολαίων.
Επιπλέον, ο κώδικάς τους ενεργοποιείται μονάχα όταν δεχθούν μία έγκυρη συναλλαγή από κάποιον άλλον λογαριασμό (είτε εξωτερικής κατοχής, είτε συμβολαίου). Η συναλλαγή αυτή εμπεριέχει, πέρα από το απαιτούμενο fee, ένα συνοδευτικό μήνυμα με πληροφορίες σχετικές με τη συνάρτηση που πρέπει να εκτελεστεί. Η δε συνάρτηση μπορεί να πραγματοποιεί ποικίλες διαφορετικές ενέργειες, όπως την ανάγνωση και την εγγραφή στην εσωτερική αποθήκευση, την πραγματοποίηση νέων συναλλαγών, ή, ακόμα, τη δημιουργία νέων συμβολαίων.
Η σύνταξη των smart contract γίνεται κατά βάση σε γλώσσες υψηλού επιπέδου και, συγκεκριμένα, στις Solidity, Vyper και Fe\footnote{Βλ. αντίστοιχα \url{https://soliditylang.org/}, \url{https://github.com/vyperlang/vyper} και \url{https://fe-lang.org/}}. Πριν την εγγραφή τους στο blockchain, μεταγλωττίζονται σε bytecode εμηνεύσιμο από την EVM, η οποία είναι υπεύθυνη για την αποθήκευση και την εκτέλεσή του (βλ. υποενότητα \ref{subsection:2-6-5-evm}).
Η σύνταξη των smart contract γίνεται κατά βάση σε γλώσσες υψηλού επιπέδου και, συγκεκριμένα, στις Solidity, Vyper και Fe\footnote{Βλ. αντίστοιχα \url{https://soliditylang.org/}, \url{https://github.com/vyperlang/vyper} και \url{https://fe-lang.org/}}. Πριν την εγγραφή τους στο blockchain, μεταγλωττίζονται σε bytecode ερμηνεύσιμο από την EVM, η οποία είναι υπεύθυνη για την αποθήκευση και την εκτέλεσή του (βλ. υποενότητα \ref{subsection:2-6-5-evm}).
\subsection{DApps}
\subsection{DApps}
Οι DApp στο οικοσύστημα του Ethereum είναι εφαρμογές οι οποίες συνδυάζουν \textenglish{smart contracts} και \textenglish{frontend UIs}. Είναι ντετερμινιστικές, Turing-complete και εκτελούνται απομονωμένα στην EVM.\cite{2.6-ethereum-documentation}
Οι DApp στο οικοσύστημα του Ethereum είναι εφαρμογές οι οποίες συνδυάζουν \textenglish{smart contracts} και \textenglish{frontend UIs}. Είναι ντετερμινιστικές, Turing-complete και εκτελούνται απομονωμένα στην EVM.\cite{2.6-ethereum-documentation}
Κατά τον χρονοπρογραμματισμό υιοθετήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Η εργασία κάθε Sprint διαχωρίστηκε περαιτέρω σε επιμέρους epic. Ωστόσο, σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των task των epic, διαδικασία που πραγματοποιήθηκε κατά το αρχικό στάδιο της υλοποίησης των τελευταίων.
Κατά τον χρονοπρογραμματισμό υιοθετήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Η εργασία κάθε Sprint διαχωρίστηκε περαιτέρω σε επιμέρους epic. Ωστόσο, σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των task των epic, διαδικασία που πραγματοποιήθηκε κατά το αρχικό στάδιο της υλοποίησης των τελευταίων.
Ως σημαντικότερος στόχος της ανάπτυξης ορίζεται η δημιουργία ενός ελάχιστου βιώσιμου προϊόντος (Minumum Viable Product - MVP). Σε αυτόν τον στόχο περιλαμβάνονται οι πιο στοιχειώδεις λειτουργίες μίας πλατφόρμας επικοινωνίας οι οποίες την κάνουν χρήσιμη, δηλαδή η δυνατότητα εγγραφής, δημιουργίας θεμάτων και μηνυμάτων και ανάγνωσης του υπάρχοντος περιεχομένου. Επειδή ο στόχος αυτός περιέχει από μόνος του σημαντική πολυπλοκότητα και δυσκολία κρίθηκε αναγκαίος ο περαιτέρω διαχωρισμός του σε τρία Sprint.
Ως σημαντικότερος στόχος της ανάπτυξης ορίζεται η δημιουργία ενός ελάχιστου βιώσιμου προϊόντος (Minimum Viable Product - MVP). Σε αυτόν τον στόχο περιλαμβάνονται οι πιο στοιχειώδεις λειτουργίες μίας πλατφόρμας επικοινωνίας οι οποίες την κάνουν χρήσιμη, δηλαδή η δυνατότητα εγγραφής, δημιουργίας θεμάτων και μηνυμάτων και ανάγνωσης του υπάρχοντος περιεχομένου. Επειδή ο στόχος αυτός περιέχει από μόνος του σημαντική πολυπλοκότητα και δυσκολία κρίθηκε αναγκαίος ο περαιτέρω διαχωρισμός του σε τρία Sprint.
Στο πρώτο Sprint ορίστηκε ο στόχος της δημιουργίας μίας βάσης κώδικα (codebase), της εξοικείωσης με τα προγραμματιστικά εργαλεία του οικοσυστήματος των DApp και της επιτυχούς δημιουργίας του πρώτου έξυπνου συμβολαίου. Ως στόχος του δεύτερου Sprint ορίστηκε η δημιουργία των τεχνικών χαρακτηριστικών που αφορούν στους χρήστες της εφαρμογής και που οι ίδιοι έχουν συνηθίσει να αναμένουν από μία τέτοια πλατφόρμα. Στο τρίτο Sprint συμπεριλήφθηκαν τα τεχνικά χαρακτηριστικά που απομένουν ώστε να δημιουργηθεί το MVP.
Στο πρώτο Sprint ορίστηκε ο στόχος της δημιουργίας μίας βάσης κώδικα (codebase), της εξοικείωσης με τα προγραμματιστικά εργαλεία του οικοσυστήματος των DApp και της επιτυχούς δημιουργίας του πρώτου έξυπνου συμβολαίου. Ως στόχος του δεύτερου Sprint ορίστηκε η δημιουργία των τεχνικών χαρακτηριστικών που αφορούν στους χρήστες της εφαρμογής και που οι ίδιοι έχουν συνηθίσει να αναμένουν από μία τέτοια πλατφόρμα. Στο τρίτο Sprint συμπεριλήφθηκαν τα τεχνικά χαρακτηριστικά που απομένουν ώστε να δημιουργηθεί το MVP.
Το Scrum είναι μία μέθοδος οργάνωσης, στην οποία ο επιμελητής του Scrum (Scrum master) διαχωρίζει τα ανεξάρτητα μέρη εργασίας (tasks) που πρέπει να υλοποιηθούν για την ολοκλήρωση των στόχων ενός project. Τα μέρη αυτά περιγράφονται αναλυτικά μαζί με τις απαιτήσεις τους και κατατίθενται σε μία λίστα εργασιών (backlog). Έπειτα, μέσα από συσκέψεις (meetings), επιλέγεται ένας αριθμός από task, τα οποία ορίζουν το επόμενο προγραμματιστικό κύκλο (Sprint). Κάθε task ανατίθεται σε κάποιο μέλος για υλοποίηση. Για το Sprint ορίζεται μία χρονική διάρκεια, στόχος της οποίας είναι η περάτωση όλων των task πριν τη λήξη της. Στο τέλος της προθεσμίας που ορίστηκε για το Sprint, τα μέλη της ομάδας αποτιμούν τα αποτελέσματα και ορίζουν το επόμενο Sprint. Η διαδικασία επαναλαμβάνεται έως ότου το έργο ολοκληρωθεί.
Το Scrum είναι μία μέθοδος οργάνωσης, στην οποία ο επιμελητής του Scrum (Scrum master) διαχωρίζει τα ανεξάρτητα μέρη εργασίας (tasks) που πρέπει να υλοποιηθούν για την ολοκλήρωση των στόχων ενός project. Τα μέρη αυτά περιγράφονται αναλυτικά μαζί με τις απαιτήσεις τους και κατατίθενται σε μία λίστα εργασιών (backlog). Έπειτα, μέσα από συσκέψεις (meetings), επιλέγεται ένας αριθμός από task, τα οποία ορίζουν το επόμενο προγραμματιστικό κύκλο (Sprint). Κάθε task ανατίθεται σε κάποιο μέλος για υλοποίηση. Για το Sprint ορίζεται μία χρονική διάρκεια, στόχος της οποίας είναι η περάτωση όλων των task πριν τη λήξη της. Στο τέλος της προθεσμίας που ορίστηκε για το Sprint, τα μέλη της ομάδας αποτιμούν τα αποτελέσματα και ορίζουν το επόμενο Sprint. Η διαδικασία επαναλαμβάνεται έως ότου το έργο ολοκληρωθεί.
Λόγω του πολύ μικρού μεγέθους της ομάδας, το Scrum ακολουθήθηκε ελαστικά. Συγκεκριμένα, δεν ορίστηκε ένας συγκεκριμένος επιμελητής του board αλλά κάθε μέλος της ομάδας φρόντιζε για τον ορισμό και την περιγραφή ενός μέρους των task. Τα Sprint δεν ήταν συνεχόμενα και δεν είχαν πάντα τον ίδιο χρόνο εκτέλεσης, αλλά προσαρμόζονταν ανάλογα με τις εκάστοτε ανάγκες και τον χρόνο των μελών. Για την οπτικοποίηση των task χρησιμοποιήθηκε κατά βάση η μέθοδος Kanban (που χρησιμοποιείται από το ίδιο το Scrum). Τα task χωρίστηκαν κατά κύριο λόγο στις παρακάτω λίστες:
Λόγω του πολύ μικρού μεγέθους της ομάδας, το Scrum ακολουθήθηκε ελαστικά. Συγκεκριμένα, δεν ορίστηκε ένας συγκεκριμένος επιμελητής του board, αλλά κάθε μέλος της ομάδας φρόντιζε για τον ορισμό και την περιγραφή ενός μέρους των task. Τα Sprint δεν ήταν συνεχόμενα και δεν είχαν πάντα τον ίδιο χρόνο εκτέλεσης, αλλά προσαρμόζονταν ανάλογα με τις εκάστοτε ανάγκες και τον χρόνο των μελών. Για την οπτικοποίηση των task χρησιμοποιήθηκε κατά βάση η μέθοδος Kanban (που χρησιμοποιείται από το ίδιο το Scrum). Τα task χωρίστηκαν κατά κύριο λόγο στις παρακάτω λίστες:
\begin{itemize}
\begin{itemize}
\item "Αναμονής" (backlog), η οποία περιέχει task τα οποία δεν έχουν ακόμα εισαχθεί σε κάποιο sprint
\item "Αναμονής" (backlog), η οποία περιέχει task τα οποία δεν έχουν ακόμα εισαχθεί σε κάποιο sprint
\item\textbf{Actions}: Αντικείμενα τα οποία περιέχουν νέα πληροφορία για την τροποποίηση του state της εφαρμογής.
\item\textbf{Actions}: Αντικείμενα τα οποία περιέχουν νέα πληροφορία για την τροποποίηση του state της εφαρμογής.
\item\textbf{Reducers}: Συναρτήσεις, οι οποίες λαμβάνοντας ένα action και διαβάζοντας το τρέχον state, εφαρμόζουν κάποια λογική για την παραγωγή ενός νέου state.
\item\textbf{Reducers}: Συναρτήσεις, οι οποίες λαμβάνοντας ένα action και διαβάζοντας το τρέχον state, εφαρμόζουν κάποια λογική για την παραγωγή ενός νέου state.
\item\textbf{Store}: Το αντικείμενο στο οποίο βρίσκεται αποθηκευμένο το state της εφαρμογής. Η βασική ιδιότητα του state είναι ότι παραμένει αμετάβλητο και, για την ανανέωσή του, παράγεται πάντα ένα νέο state object μέσω των reducer.
\item\textbf{Store}: Το αντικείμενο στο οποίο βρίσκεται αποθηκευμένο το state της εφαρμογής. Η βασική ιδιότητα του state είναι ότι παραμένει αμετάβλητο και, για την ανανέωσή του, παράγεται πάντα ένα νέο state object μέσω των reducer.
\item\textbf{Middleware}: Προαιρετικά κομμάτια κώδικα που λαμβάνουν action πριν εκείνα φτάσουν στους reducer και εκτελούν κάποιο side effect. Συνήθως χρησιμοποιούνται για ενέργειες όπως logging και error reporting ή για να ενώσουν το Redux με εξωτερικά API.
\item\textbf{Middleware}: Προαιρετικά κομμάτια κώδικα που λαμβάνουν actions πριν εκείνα φτάσουν στους reducer και τα οποία εκτελούν κάποιο side effect. Συνήθως χρησιμοποιούνται για ενέργειες όπως logging και error reporting, ή για να ενώσουν το Redux με εξωτερικά API.
\end{itemize}
\end{itemize}
Αν και το ίδιο το Redux είναι μικροσκοπικό σε μέγεθος, ο τρόπος υλοποίησής του έχει επιτρέψει τη δημιουργία ενός τεράστιου οικοσυστήματος εργαλείων και επεκτάσεων, τα οποία συνδέονται μαζί του ή βασίζονται σε αυτό. Για παράδειγμα, μία από τις κύριες χρήσεις του είναι η κατασκευή διεπαφών χρήστη σε συνδύασμό με άλλες βιβλιοθήκες, όπως με τη React. Σε αυτήν την περίπτωση, συνδέεται μαζί της με το npm πακέτο \texttt{react-redux} και η λειτουργία του υπό ανάπτυξη UI προκύπτει ως εξής:
Αν και το ίδιο το Redux είναι μικροσκοπικό σε μέγεθος, ο τρόπος υλοποίησής του έχει επιτρέψει τη δημιουργία ενός τεράστιου οικοσυστήματος εργαλείων και επεκτάσεων, τα οποία συνδέονται μαζί του ή βασίζονται σε αυτό. Για παράδειγμα, μία από τις κύριες χρήσεις του είναι η κατασκευή διεπαφών χρήστη σε συνδύασμό με άλλες βιβλιοθήκες, όπως με τη React. Σε αυτήν την περίπτωση, συνδέεται μαζί της με το npm πακέτο \texttt{react-redux} και η λειτουργία του υπό ανάπτυξη UI προκύπτει ως εξής:
Η λειτουργία της βάσης OrbitDB επιτρέπει τη χρήση προσαρμοσμένων orbit-db-identity-provider, οι οποίοι μπορούν να δημιουργούν και να επικυρώνουν
Η λειτουργία της βάσης OrbitDB επιτρέπει τη χρήση προσαρμοσμένων orbit-db-identity-provider, οι οποίοι μπορούν να δημιουργούν και να επικυρώνουν
τα μοναδικά αναγνωριστικά των χρήστών (OrbitDB Identity) βάσει προσαρμοσμένων εξωτερικών αναγνωριστικών (external identifier), όπως παρουσιάζεται στο σχήμα \ref{figure:4-2-4-2-orbit-db-identity}.
τα μοναδικά αναγνωριστικά των χρηστών (OrbitDB Identity) βάσει προσαρμοσμένων εξωτερικών αναγνωριστικών (external identifier), όπως παρουσιάζεται στο σχήμα \ref{figure:4-2-4-2-orbit-db-identity}.
Στην περίπτωση της εφαρμογής Concordia είναι χρήσιμο να μπορούν να υπολογιστούν με ντετερμινιστικό τρόπο οι OrbitDB βάσεις δεδομένων του κάθε χρήστη, για λόγους απλότητας και εξοικονόμησης αποθηκευτικού χώρου επί του blockchain. Έτσι, αφού κάθε χρήστης ορίζεται μοναδικά μέσω της διεύθυνσης Ethereum με την οποία εγγράφεται και συνδέεται, αυτή θα πρέπει να αποτελεί και το εξωτερικό αναγνωριστικό στο πεδίο id της OrbitDB Identity.
Στην περίπτωση της εφαρμογής Concordia είναι χρήσιμο να μπορούν να υπολογιστούν με ντετερμινιστικό τρόπο οι OrbitDB βάσεις δεδομένων του κάθε χρήστη, για λόγους απλότητας και εξοικονόμησης αποθηκευτικού χώρου επί του blockchain. Έτσι, αφού κάθε χρήστης ορίζεται μοναδικά μέσω της διεύθυνσης Ethereum με την οποία εγγράφεται και συνδέεται, αυτή θα πρέπει να αποτελεί και το εξωτερικό αναγνωριστικό στο πεδίο id της OrbitDB Identity.
@ -9,7 +9,7 @@
Για αυτόν το λόγο υλοποιήθηκε το άρθρωμα eth-identity-provider, το οποίο:
Για αυτόν το λόγο υλοποιήθηκε το άρθρωμα eth-identity-provider, το οποίο:
\begin{itemize}
\begin{itemize}
\item Παράγει ένα OrbitDB Identity για τον χρήστη, με id τον συνδυασμο του Ethereum address του και του address του κεντρικού contract της εφαρμογής\footnote{Το δεύτερο εισήχθη για την αποφυγή προβλημάτων σε πολλαπλές αναπτύξεις συμβολαίων.}. Αυτό επιτυγχάνεται με την υπογραφή μίας συναλλαγής με το Ethereum private key του χρήστη, μέσω του MetaMask.
\item Παράγει ένα OrbitDB Identity για τον χρήστη, με id τον συνδυασμό του Ethereum address του και του address του κεντρικού contract της εφαρμογής\footnote{Το δεύτερο εισήχθη για την αποφυγή προβλημάτων σε πολλαπλές αναπτύξεις συμβολαίων.}. Αυτό επιτυγχάνεται με την υπογραφή μίας συναλλαγής με το Ethereum private key του χρήστη, μέσω του MetaMask.
\item Επικυρώνει τις OrbitDB Identity που απαιτούνται, εξασφαλίζοντας ότι υπογράφηκαν από τα Ethereum private key των κατόχων τους.
\item Επικυρώνει τις OrbitDB Identity που απαιτούνται, εξασφαλίζοντας ότι υπογράφηκαν από τα Ethereum private key των κατόχων τους.
\item Διασφαλίζει ντετερμινιστικές, υπολογίσιμες διευθύνσεις OrbitDB βάσεων για τον κάθε χρήστη.
\item Διασφαλίζει ντετερμινιστικές, υπολογίσιμες διευθύνσεις OrbitDB βάσεων για τον κάθε χρήστη.
Το άρθρωμα breeze αναπτύχθηκε στα πλαίσια της διπλωματικής εργασίας και αποτελεί μία βιβλιοθήκηπερίβλημα (wrapper) της βιβλιοθήκης OrbitDB, η οποία παρέχει ένα Redux store.
Το άρθρωμα breeze αναπτύχθηκε στα πλαίσια της διπλωματικής εργασίας και αποτελεί μία βιβλιοθήκη-περίβλημα (wrapper) της βιβλιοθήκης OrbitDB, η οποία παρέχει ένα Redux store.
Με τη συμπερίληψη του store του αρθρώματος στο κεντρικό Redux store της εφαρμογής, παρέχεται η δυνατότητα εκτέλεσης των λειτουργιών των OrbitDB βάσεων εντός του γενικότερου flow του frontend. Έτσι, οι προγραμματιστικές διεπαφές που προσφέρει η OrbitDB χρησιμοποιούνται πλέον μέσα από actions, reducers και middleware.
Με τη συμπερίληψη του store του αρθρώματος στο κεντρικό Redux store της εφαρμογής, παρέχεται η δυνατότητα εκτέλεσης των λειτουργιών των OrbitDB βάσεων εντός του γενικότερου flow του frontend. Έτσι, οι προγραμματιστικές διεπαφές που προσφέρει η OrbitDB χρησιμοποιούνται πλέον μέσα από actions, reducers και middleware.
Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application), η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη σε γλώσσα προγραμματισμού JavaScript, ενώ η αρχιτεκτονική της παρουσιάζεται στο σχήμα \ref{figure:4-3-concordia-pinner-architecture}.
Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (terminal application/cmd application), η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη σε γλώσσα προγραμματισμού JavaScript, ενώ η αρχιτεκτονική της παρουσιάζεται στο σχήμα \ref{figure:4-3-concordia-pinner-architecture}.
\item\textbf{Contracts Migrator}: Η υπηρεσία εκτελεί αίτημα HTTP κατά τη μεταφόρτωση των \textenglish{contract} στο Ethereum blockchain. Eπίσης, εκτελεί αίτημα HTTP για τη μεταφόρτωση των \textenglish{contract artifact} στην υπηρεσία Contracts Provider.
\item\textbf{Contracts Migrator}: Η υπηρεσία εκτελεί αίτημα HTTP κατά τη μεταφόρτωση των \textenglish{contract} στο Ethereum blockchain. Επίσης, εκτελεί αίτημα HTTP για τη μεταφόρτωση των \textenglish{contract artifact} στην υπηρεσία Contracts Provider.
\item\textbf{Concordia Application}: Η υπηρεσία εκτελεί αίτημα HTTP για τη λήψη των \textenglish{contract artifact} από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για τη διενέργεια συναλλαγών στο Ethereum blockchain και, τέλος, δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server, για την ανακάλυψη ομότιμων χρηστών στο δίκτυο IPFS.
\item\textbf{Concordia Application}: Η υπηρεσία εκτελεί αίτημα HTTP για τη λήψη των \textenglish{contract artifact} από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για τη διενέργεια συναλλαγών στο Ethereum blockchain και, τέλος, δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server, για την ανακάλυψη ομότιμων χρηστών στο δίκτυο IPFS.
\item\textbf{Pinner}: Η υπηρεσία εκτελεί αίτημα HTTP για τη λήψη των \textenglish{contract artifact} από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για την ανανέωση και παρατήρηση της κατάστασης του contract στο Ethereum blockchain και τέλος δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server για την ανακάλυψη peer στο δίκτυο IPFS.
\item\textbf{Pinner}: Η υπηρεσία εκτελεί αίτημα HTTP για τη λήψη των \textenglish{contract artifact} από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για την ανανέωση και παρατήρηση της κατάστασης του contract στο Ethereum blockchain και τέλος δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server για την ανακάλυψη peer στο δίκτυο IPFS.
\item\textbf{Rendezvous Server}: Η υπηρεσία διατηρεί ανοιχτά κανάλια επικοινωνίας UDP με τους ομότιμους χρήστες, μέσω των οποίων ενημερώνει τη λίστα των διαθέσιμων, ενεργών χρηστών.
\item\textbf{Rendezvous Server}: Η υπηρεσία διατηρεί ανοιχτά κανάλια επικοινωνίας UDP με τους ομότιμους χρήστες, μέσω των οποίων ενημερώνει τη λίστα των διαθέσιμων ενεργών χρηστών.
\item\textbf{Contracts Provider}: Η υπηρεσία δεν υποκινεί καμία επικοινωνία, παρά μόνο απαντά σε αιτήματα επικοινωνίας από άλλες υπηρεσίες.
\item\textbf{Contracts Provider}: Η υπηρεσία δεν υποκινεί καμία επικοινωνία, παρά μόνο απαντά σε αιτήματα επικοινωνίας άλλων υπηρεσιών.
Έστω τώρα ένας χρήστης που επιθυμεί να διαβάσει το προηγούμενο θέμα. Αρχικά, πρέπει να διαβαστούν τα μεταδεδομένα του συγκεκριμένου θέματος από το blockchain. Έπειτα, διαβάζονται από το blockchain οι αύξοντες αριθμοί των μηνυμάτων που έχουν δημοσιευτεί σε αυτό το θέμα. Σε μία τελευταία ανάκτηση από το blockchain διαβάζονται τα μεταδομένα του κάθε μηνύματος. Έπειτα, η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του θέματος και των μηνυμάτων, τα οποία ανακτώνται από τις προσωπικές OrbitDB βάσεις του κάθε χρήστη. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα.
Έστω τώρα ένας χρήστης που επιθυμεί να διαβάσει το προηγούμενο θέμα. Αρχικά, πρέπει να διαβαστούν τα μεταδεδομένα του συγκεκριμένου θέματος από το blockchain. Έπειτα, διαβάζονται από το blockchain οι αύξοντες αριθμοί των μηνυμάτων που έχουν δημοσιευτεί σε αυτό το θέμα. Σε μία τελευταία ανάκτηση από το blockchain διαβάζονται τα μεταδεδομένα του κάθε μηνύματος. Έπειτα, η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του θέματος και των μηνυμάτων, τα οποία ανακτώνται από τις προσωπικές OrbitDB βάσεις του κάθε χρήστη. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα.
Σε αυτήν την ενότητα περιγράφονται οι μεγαλύτερες δυσκολίες που αντιμετωπίστηκαν κατά την ανάπτυξη της πλατφόρμας. Αυτές μπορεί να αναφέρονται σε τεχνικά θέματα, αλλά και στις κοινωνικές και πολιτισμικές συνθήκες που επικρατούν στον χώρο των DApp και των crypto γενικότερα.
Σε αυτήν την ενότητα περιγράφονται οι μεγαλύτερες δυσκολίες που αντιμετωπίστηκαν κατά την ανάπτυξη της πλατφόρμας. Αυτές μπορεί να αναφέρονται σε τεχνικά θέματα, αλλά και στις κοινωνικές και πολιτισμικές συνθήκες που επικρατούν στον χώρο των DApp και των crypto γενικότερα.
\newpage
Μία από τις μεγαλύτερες τροχοπέδες που καθυστέρησε σοβαρά την ανάπτυξη ήταν η πρωιμότητα των βιβλιοθηκών και των εργαλείων ανάπτυξης. Οι βασικότερες βιβλιοθήκες που χρησιμοποιήθηκαν ήταν σε πρώτο ή δεύτερο πειραματικό στάδιο (alpha και beta phase αντίστοιχα). Συγκεκριμένα:
Μία από τις μεγαλύτερες τροχοπέδες που καθυστέρησε σοβαρά την ανάπτυξη ήταν η πρωιμότητα των βιβλιοθηκών και των εργαλείων ανάπτυξης. Οι βασικότερες βιβλιοθήκες που χρησιμοποιήθηκαν ήταν σε πρώτο ή δεύτερο πειραματικό στάδιο (alpha και beta phase αντίστοιχα). Συγκεκριμένα:
\item Η διαγραφή των τοπικών δεδομένων, όπως περιγράφεται στη \ref{srs:functional-srs-delete-local-data} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-delete-local-data}.
\item Η διαγραφή των τοπικών δεδομένων, όπως περιγράφεται στη \ref{srs:functional-srs-delete-local-data} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-delete-local-data}.
\end{itemize}
\end{itemize}
Τα παραπάνω αντιστοιχούν σε 11 ολοκληρωμένες από τις 13 προδιαγεγραμμένες ΛΑ ή πλήρωση 84.6\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApp και υπερβάλλον για τα πλαίσια ενός PoC. Στο \hyperref[{appendix-a}]{παράρτημα Αʹ} περιλαμβάνονται στιγμιότυπα οθόνης τα οποία αντιστοιχίζονται με τις ΛΑ των υλοποιήμενων χαρακτηριστικών.
Τα παραπάνω αντιστοιχούν σε 11 ολοκληρωμένες από τις 13 προδιαγεγραμμένες ΛΑ ή πλήρωση 84.6\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApp και υπερβάλλον για τα πλαίσια ενός PoC. Στο \hyperref[{appendix-a}]{παράρτημα Αʹ} περιλαμβάνονται στιγμιότυπα οθόνης τα οποία αντιστοιχίζονται με τις ΛΑ των υλοποιημένων χαρακτηριστικών.
Τα χαρακτηριστικά τα οποία παραλήφθηκαν είναι η δημιουργία κοινοτήτων και ο ορισμός εξωτερικών contract για τα token τους, όπως περιγράφονται στις \ref{srs:functional-srs-create-communities}\&\ref{srs:functional-srs-assign-community-contract}, καθώς και στο σενάριο χρήσης \ref{subsection:3-10-use-case-create-community}.
Τα χαρακτηριστικά τα οποία παραλήφθηκαν είναι η δημιουργία κοινοτήτων και ο ορισμός εξωτερικών contract για τα token τους, όπως περιγράφονται στις \ref{srs:functional-srs-create-communities}\&\ref{srs:functional-srs-assign-community-contract}, καθώς και στο σενάριο χρήσης \ref{subsection:3-10-use-case-create-community}.
@ -24,7 +24,7 @@
Επίσης, η ΜΛΑ που αφορά στην ελαχιστοποίηση των fee (\ref{srs:non-functional-srs-minimize-fees}) ακολουθήθηκε κατά το δυνατόν σε ολόκληρες τις διαδικασίες του σχεδιασμού και της υλοποίησης. Αυτό επιτεύχθηκε τόσο με την αποθήκευση των απολύτως απαραίτητων δεδομένων επί του blockchain, όσο και με τη βελτιστοποίηση του κώδικα των smart contract, ώστε να εκτελείται με τον μικρότερο δυνατό αριθμό υπολογιστικών κύκλων.
Επίσης, η ΜΛΑ που αφορά στην ελαχιστοποίηση των fee (\ref{srs:non-functional-srs-minimize-fees}) ακολουθήθηκε κατά το δυνατόν σε ολόκληρες τις διαδικασίες του σχεδιασμού και της υλοποίησης. Αυτό επιτεύχθηκε τόσο με την αποθήκευση των απολύτως απαραίτητων δεδομένων επί του blockchain, όσο και με τη βελτιστοποίηση του κώδικα των smart contract, ώστε να εκτελείται με τον μικρότερο δυνατό αριθμό υπολογιστικών κύκλων.
Τέλος, η ΜΛΑ που σχετίζεται με την αναβαθμισιμότητα των contract (\ref{srs:non-functional-srs-upgrade-contracts}) καταστρατηγήθηκε, λόγω του επιπρόσθετου χρόνου που θα απαιτούσε μία τέτοια υλοποίηση. Ωστόσο, υπάρχουν ήδη πλήρως λειτουργικές μέθοδοι για την επίτευξη αυτού του στόχου, με διαθέσιμα plugin\footnote{\url{https://docs.openzeppelin.com/upgrades-plugins/1.x/}} που μπορούν να ενσωματωθούν απευθείας στις υπάρχοντες ροές εργασίας.
Τέλος, η ΜΛΑ που σχετίζεται με την αναβαθμισιμότητα των contract (\ref{srs:non-functional-srs-upgrade-contracts}) καταστρατηγήθηκε, λόγω του επιπρόσθετου χρόνου που θα απαιτούσε μία τέτοια υλοποίηση. Ωστόσο, υπάρχουν ήδη πλήρως λειτουργικές μέθοδοι για την επίτευξη αυτού του στόχου, με διαθέσιμα plugin\footnote{\url{https://docs.openzeppelin.com/upgrades-plugins/1.x/}} που μπορούν να ενσωματωθούν απευθείας στις υπάρχουσες ροές εργασίας.
Ωστόσο, επισημαίνεται ότι η εφαρμογή χαρακτηρίζεται από ορισμένα μειονεκτήματα, τα οποία σχετίζονται, κυρίως, με την πρώιμη κατάσταση ανάπτυξης των επιλεγμένων τεχνολογιών. Πιο συγκεκριμένα:
Ωστόσο, επισημαίνεται ότι η εφαρμογή χαρακτηρίζεται από ορισμένα μειονεκτήματα, τα οποία σχετίζονται, κυρίως, με την πρώιμη κατάσταση ανάπτυξης των επιλεγμένων τεχνολογιών. Πιο συγκεκριμένα:
\begin{itemize}
\begin{itemize}
\item Στο Application tier, μέσω της χρήσης του Ethereum, εισάγονται όλα εκείνα τα ζητήματα που συνοδεύουν επί του παρόντος το blockchain και τα smart contract. Τα βασικότερα από αυτά είναι τα τέλη των συναλλαγών, η ανάγκη χρήσης επιπρόσθετων λογισμικών (π.χ. MetaMask) και η κλιμακοθετησιμότητά (scalability) των DApp. Σε γενικές γραμμές, το κλίμα στην παγκόσμια προγραμματιστική κοινότητα παραμένει αρκέτα πολωμένο ως προς το αν τελικά πλατφόρμες όπως το Ethereum θα μπορέσουν να ξεπεράσουν τα διάφορα προβλήματα και να ανταπεξέλθουν στις προσδοκίες.
\item Στο Application tier, μέσω της χρήσης του Ethereum, εισάγονται όλα εκείνα τα ζητήματα που συνοδεύουν επί του παρόντος το blockchain και τα smart contract. Τα βασικότερα από αυτά είναι τα τέλη των συναλλαγών, η ανάγκη χρήσης επιπρόσθετων λογισμικών (π.χ. MetaMask) και η κλιμακοθετησιμότητά (scalability) των DApp. Σε γενικές γραμμές, το κλίμα στην παγκόσμια προγραμματιστική κοινότητα παραμένει αρκετά πολωμένο ως προς το αν τελικά πλατφόρμες όπως το Ethereum θα μπορέσουν να ξεπεράσουν τα διάφορα προβλήματα και να ανταπεξέλθουν στις προσδοκίες.
\item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, όπως εκείνο της εύρεσης των ομότιμων κόμβων, η οποία επί του παρόντος βασίζεται σε signalling server\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}. Έτσι, \textit{ως προς την ανακάλυψη} των κατάλληλων peer, το δίκτυο του IPFS μπορεί προσωρινά να θεωρηθεί υβριδικό. Επιπλέον, κατά την αποσφαλμάτωση της εφαρμογής έγιναν φανερά ορισμένα ζητήματα που σχετίζονται με την αντιγραφή των δεδομένων των OrbitDB βάσεων μεταξύ των κόμβων, κάτι που είναι ιδιαίτερα σημαντικό, διότι πρόκειται για διαδικασία που αναμένεται να λειτουργεί με υψηλή αξιοπιστία.
\item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, όπως εκείνο της εύρεσης των ομότιμων κόμβων, η οποία επί του παρόντος βασίζεται σε signalling servers\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}. Έτσι, \textit{ως προς την ανακάλυψη} των κατάλληλων peer, το δίκτυο του IPFS μπορεί προσωρινά να θεωρηθεί υβριδικό. Επιπλέον, κατά την αποσφαλμάτωση της εφαρμογής έγιναν φανερά ορισμένα ζητήματα που σχετίζονται με την αντιγραφή των δεδομένων των OrbitDB βάσεων μεταξύ των κόμβων, κάτι που είναι ιδιαίτερα σημαντικό, διότι πρόκειται για διαδικασία που αναμένεται να λειτουργεί με υψηλή αξιοπιστία.
\end{itemize}
\end{itemize}
Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση της τεχνολογικής στοίβας.
Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση της τεχνολογικής στοίβας.
\item Ψηφοφορία με σειρά προτίμησης (ranked voting): το εκλογικό σώμα θα έχει τη δυνατότητα να ψηφίζει με σειρά προτίμησης μεταξύ των διαθέσιμων επιλογών των ψηφοφοριών.
\item Ψηφοφορία με σειρά προτίμησης (ranked voting): το εκλογικό σώμα θα έχει τη δυνατότητα να ψηφίζει με σειρά προτίμησης μεταξύ των διαθέσιμων επιλογών των ψηφοφοριών.
\item Πολλαπλή ψήφος: ορισμένοι ψηφοφόροι θα έχουν ισχυρότερη ψήφο βάσει κάποιου κριτηρίου (π.χ. βάσει του reputation τους).
\item Πολλαπλή ψήφος: ορισμένοι ψηφοφόροι θα έχουν ισχυρότερη ψήφο βάσει κάποιου κριτηρίου (π.χ. βάσει του reputation τους).
\item Έμμεση ψηφοφορία: κάθε μέλος θα ορίζει αντιπρόσωπο για μία ή περισσότερες ψηφοφορίες, για ορισμένο ή αόριστο χρονικό διάστημα.
\item Έμμεση ψηφοφορία: κάθε μέλος θα ορίζει αντιπρόσωπο για μία ή περισσότερες ψηφοφορίες, για ορισμένο ή αόριστο χρονικό διάστημα.
Φυσικά τα παραπάνω είναι καθαρά ενδεικτικά, πράγμα που σημαίνει ότι θα είναι εφικτό να μπορούν να δημιουργούνται εντελώς διαφορετικά συμβόλαια συστημάτων ψηφοφορίας, ανά πάσα στιγμή και από τον οποιονδήποτε. Η δε σύνδεσή τους με την εφαρμογή θα είναι όμοια με τα ήδη υλοποιημένα, αφού η μοναδική απαιτούμενη ενέργεια θα είναι η αποθήκευση ενός pointer προς το voting contract της εκάστοτε κοινότητας.
Φυσικά τα παραπάνω είναι καθαρά ενδεικτικά, πράγμα που σημαίνει ότι θα είναι εφικτό να μπορούν να δημιουργούνται εντελώς διαφορετικά συμβόλαια συστημάτων ψηφοφορίας, ανά πάσα στιγμή και από τον οποιονδήποτε. Η δε σύνδεσή τους με την εφαρμογή θα είναι όμοια με τα ήδη υλοποιημένα, αφού η μοναδική απαιτούμενη ενέργεια θα είναι η αποθήκευση ενός pointer προς το voting contract της εκάστοτε κοινότητας.
@ -43,6 +43,6 @@
Μία επιπλέον προσθήκη στην εφαρμογή μπορεί είναι ένα σύστημα απόδοσης εμπιστοσύνης (reputation system). Μέσω ενός reputation system, οι χρήστες μπορούν να κερδίζουν ή να χάνουν βαθμούς εμπιστοσύνης, με τον τρόπο που ορίζεται από το εκάστοτε smart contract.
Μία επιπλέον προσθήκη στην εφαρμογή μπορεί είναι ένα σύστημα απόδοσης εμπιστοσύνης (reputation system). Μέσω ενός reputation system, οι χρήστες μπορούν να κερδίζουν ή να χάνουν βαθμούς εμπιστοσύνης, με τον τρόπο που ορίζεται από το εκάστοτε smart contract.
Ορισμένες ενδεικτικές χρήσεις του είναι η συνεργασία του με τους μηχανισμούς που περιγράφονται στις υποενότητες \ref{subsection:5-2-1-ethereum-fees-management} και \ref{subsection:5-2-3-alternative-voting-systems}. Για παράδειγμα, η ισχύς της ψήφου ενός μέλους μίας κοινότητας ή το ποσό των τελών που καλείται να καταβάλλει στο Ethereum θα μπορούσαν να υπολογίζονται αναλογα με τον βαθμό εμπιστοσύνης που έχει αποκτήσει.
Ορισμένες ενδεικτικές του χρήσεις μπορούν να προκύψουν από τη συνεργασία του με τους μηχανισμούς που περιγράφονται στις υποενότητες \ref{subsection:5-2-1-ethereum-fees-management} και \ref{subsection:5-2-3-alternative-voting-systems}. Για παράδειγμα, η ισχύς της ψήφου ενός μέλους μίας κοινότητας ή το ποσό των τελών που καλείται να καταβάλλει στο Ethereum θα μπορούσαν να υπολογίζονται ανάλογα με τον βαθμό εμπιστοσύνης που έχει αποκτήσει.
Υιοθετώντας την αφηρημένη λογική που περιγράφηκε στα συστήματα ψηφοφορίας της προηγούμενης παραγράφου, είναι εφικτό να παρέχεται η δυνατότητα σε κάθε κοινότητα να επιλέγει μεταξύ ενός συνόλου διαφορετικών συστημάτων απόδοσης εμπιστοσύνης για τα μέλη της, μέσω εναλλακτικών reputation smart contract. Ήδη υπάρχει μία πλούσια γκάμα τέτοιων συστημάτων που μπορούν να υλοποιηθούν επί του Ethereum, με την ταξινομία τους να ορίζεται επί μίας πληθώρας ανεξάρτητων διαστάσεων\cite{5.2-taxonomy-of-reputation-systems}. Ωστόσο, η περαιτέρω ανάλυση τους είναι θέμα που εκτείνεται πέρα από τα πλαίσια της παρούσας διπλωματικής εργασίας.
Υιοθετώντας την αφηρημένη λογική που περιγράφηκε στα συστήματα ψηφοφορίας της προηγούμενης παραγράφου, είναι εφικτό να παρέχεται η δυνατότητα σε κάθε κοινότητα να επιλέγει μεταξύ ενός συνόλου διαφορετικών συστημάτων απόδοσης εμπιστοσύνης για τα μέλη της, μέσω εναλλακτικών reputation smart contract. Ήδη υπάρχει μία πλούσια γκάμα τέτοιων συστημάτων που μπορούν να υλοποιηθούν επί του Ethereum, με την ταξινομία τους να ορίζεται επί μίας πληθώρας ανεξάρτητων διαστάσεων\cite{5.2-taxonomy-of-reputation-systems}. Ωστόσο, η περαιτέρω ανάλυσή τους είναι θέμα που εκτείνεται πέρα από τα πλαίσια της παρούσας διπλωματικής εργασίας.
Στο παρόν παράρτημα παρατίθενται πίνακες με στατιστικά στοιχεία του κώδικα της εφαρμογής Concordia, καθώς και των υλοποιημένων βιβλιοθηκών. Συγκεκριμένα, πραγματοποιήθηκε καταμέτρηση των αρχείων και των γραμμών κώδικα (27-1-2022) μέσω του προγραμμάτος cloc\footnote{\url{https://github.com/AlDanial/cloc}}, διαδικασία στην οποία αγνοήθηκαν αυτόματα configuration και auto-generated αρχεία (π.χ. yarn.lock, .gitignore).
Στο παρόν παράρτημα παρατίθενται πίνακες με στατιστικά στοιχεία του κώδικα της εφαρμογής Concordia, καθώς και των υλοποιημένων βιβλιοθηκών. Συγκεκριμένα, πραγματοποιήθηκε καταμέτρηση των αρχείων και των γραμμών κώδικα (27-1-2022) μέσω του προγράμματος cloc\footnote{\url{https://github.com/AlDanial/cloc}}, διαδικασία στην οποία αγνοήθηκαν αυτόματα configuration και auto-generated αρχεία (π.χ. yarn.lock, .gitignore).