Before Width: | Height: | Size: 702 KiB After Width: | Height: | Size: 702 KiB |
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 689 KiB After Width: | Height: | Size: 689 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 974 KiB |
After Width: | Height: | Size: 165 KiB |
@ -1,14 +1,17 @@ |
|||
\chapter*{Περίληψη} |
|||
\addcontentsline{toc}{chapter}{Περίληψη} |
|||
|
|||
Τις τελευταίες δεκαετίες, η ραγδαία ανάπτυξη του διαδικτύου μετέβαλε ριζικά τις ανθρώπινες |
|||
κοινωνίες, μέσω μίας πληθώρας ψηφιακών εφαρμογών, οι οποίες, στη συντριπτική τους πλειοψηφία, προσφέρονται από παρόχους υπηρεσιών υπολογιστικού νέφους, ακολουθώντας την αρχιτεκτονική πελάτη-εξυπηρετητή. |
|||
|
|||
Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτα απ' όλα, ο χρήστης καλείται να εμπιστευθεί τα προσωπικά του δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, διαθέτει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής. |
|||
Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτα απ' όλα, ο χρήστης καλείται να εμπιστευθεί τα προσωπικά του δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, αποκτάει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής. |
|||
|
|||
Αυτοί είναι μερικοί βασικοί λόγοι που συνετέλεσαν στην ταχεία ανάπτυξη ενός συνόλου λογισμικών ανοιχτού κώδικα, όπως του Ethereum blockchain και του IPFS, τα οποία, αν και βρίσκονται σε σχετικά πρώιμο στάδιο, αποτελούν ήδη ικανά εργαλεία δημιουργίας κατανεμημένων και αποκεντρωμένων εφαρμογών. |
|||
Αυτοί είναι μερικοί βασικοί λόγοι που συνετέλεσαν στην ταχεία ανάπτυξη ενός συνόλου καινοτόμων λογισμικών ανοιχτού κώδικα, τα οποία βασίζονται σε τεχνολογίες όπως το blockchain και τα δίκτυα ομότιμων κόμβων. Τα παραπάνω, αν και βρίσκονται σε σχετικά πρώιμο στάδιο, αποτελούν ήδη ισχυρά εργαλεία δημιουργίας κατανεμημένων και αποκεντρωμένων εφαρμογών. |
|||
|
|||
Στόχος της παρούσας διπλωματικής εργασίας είναι η υλοποίηση μίας αυτόνομης κοινωνικής πλατφόρμας, |
|||
η οποία, αξιοποιώντας τεχνολογίες αποκέντρωσης, αφενός θα επιστρέφει την κυριότητα των προσωπικών |
|||
δεδομένων στον χρήστη, αφετέρου θα παρέχει τη δυνατότητα διενέργειας διαφανών δημοκρατικών ψηφοφοριών. Αυτά μέσα σε ένα πλαίσιο ανθεκτικό, τόσο σε σφάλματα και επιθέσεις, όσο και σε απόπειρες λογοκρισίας και παραποίησης. |
|||
|
|||
Η αναπτυχθείσα πιλοτική εφαρμογή "Concordia" προσεγγίζει τον παραπάνω στόχο συνδυάζοντας τα Ethereum και IPFS, ώστε να ορίσει έναν αποκεντρωμένο ψηφιακό χώρο, τόσο σε αρχιτεκτονικό όσο και πολιτικό επίπεδο. |
|||
\\[2\baselineskip] |
|||
\textbf{Λέξεις-Κλειδιά}: Αποκεντροποίηση, Ethereum, Blockchain, Έξυπνο Συμβόλαιο, Αποκεντρωμένη Εφαρμογή, IPFS, OrbitDB, React, Redux, Jenkins |
@ -1,3 +1,17 @@ |
|||
\chapter*{Abstract} |
|||
\addcontentsline{toc}{chapter}{Abstract} |
|||
Don't forget the keywords. |
|||
|
|||
In recent decades, the rapid growth of the internet has radically changed human |
|||
societies, through a plethora of digital applications, the vast majority of which are offered by cloud computing service providers, following the client-server architecture. |
|||
|
|||
Although this implementation model has proven to be highly functional and has improved significantly over the years, its centralized logic is accompanied by a number of problems. First of all, the user is required to trust his personal data to an external entity. Maintaining full control over them, the latter gains the ability to process, share and censor them, either to serve its own interests or to comply with other authorities in power. In addition, there is no guarantee of data availability, as, at any time, the server can be disconnected indefinitely and for a variety of reasons, such as a cyber attack or a natural disaster. |
|||
|
|||
These are some of the key factors that have led to the rapid development of a wide range of innovating open source software, that are based on technologiew such as blockchain and peer-to-peer networks. The above, although at a relatively early stage, are already powerful tools for creating distributed and decentralized applications. |
|||
|
|||
The aim of this thesis is the implementation of an autonomous social platform, |
|||
which, by utilizing decentralization technologies, on the one hand will return the ownership of the staff |
|||
user data, on the other hand, will enable transparent democratic voting processes. These in a context resistant to both faults and attacks, as well as attempts at censorship and falsification. |
|||
|
|||
The developed proof of concept application "Concordia" approaches the above goal by combining Ethereum and IPFS, in order to define a decentralized digital space, both at architectural and political level. |
|||
\\[2\baselineskip] |
|||
\textbf {Keywords}: Decentralization, Ethereum, Blockchain, Smart Contract, Decentralized Application, IPFS, OrbitDB, React, Redux, Jenkins |
@ -1,3 +1,11 @@ |
|||
\chapter*{Ευχαριστίες} |
|||
\addcontentsline{toc}{chapter}{Ευχαριστίες} |
|||
Ευχαριστούμε η Αθήνα. Ευχαριστούμε η Ελλάδα. |
|||
|
|||
Σε αυτό το σημείο θα θέλαμε να ευχαριστήσουμε εγκάρδια όλους εκείνους που συνέβαλαν στην εκπόνηση της παρούσας εργασίας: |
|||
|
|||
\begin{itemize} |
|||
\item Τον επιβλέποντα καθηγητή μας, κ. Δημάκη Χρήστο, για την ευκαιρία που μας έδωσε να ασχοληθούμε με το συγκεκριμένο θέμα και την εμπιστοσύνη που μας έδειξε από την αρχή μέχρι το τέλος. |
|||
\item Τη Νικολαΐδου Μελίνα, για τη σχεδίαση του λογότυπου της εφαρμογής και τη δημιουργία σημαντικού τμήματος των σχημάτων του παρόντος εγγράφου. |
|||
\item Τις οικογένειες και τους φίλους μας, για την αμέριστη υλική και ηθική υποστήριξη που μας προσέφεραν καθ' όλη τη διάρκεια των σπουδών μας. |
|||
\item Ο ένας τον άλλον, για την άρτια επικοινωνία και συνεργασία, καθώς και για την υπομονή και την επιμονή, χαρακτηριστικά καθοριστικής σημασίας για την επιτυχή πορεία της διπλωματικής. |
|||
\end{itemize} |
|||
|
@ -1,9 +1,11 @@ |
|||
\section{Μεθοδολογία της διπλωματικής} |
|||
\section{Μεθοδολογία της διπλωματικής}\label{section:1-5-methodology} |
|||
|
|||
Η πάρούσα διπλωματική είχε έμπνευση τις συζητήσεις μας με τον Δημάκη. |
|||
Έναυσμα της παρούσας εργασίας αποτέλεσε η παρατηρήση της αρχιτεκτονικής δομής των σύγχρονων διαδικτυακών εφαρμογών και η ανάγκη διερεύνησης των επιπτώσεών της στον τελικό χρήστη. |
|||
|
|||
Αρχικά, πραγματοποιήθηκε έρευνα του χώρου των αποκετρωμένων τεχνολογιών με στόχο την κατανόηση των επιπλοκών αυτών των τεχνολογίων τόσο στην ανάπτυξη του κώδικα όσο και στην χρήση.... |
|||
Αρχικά, ορίστηκε με σαφήνεια το πρόβλημα (\hyperref[section:1-3-problem-definition]{ενότητα 1.3}) και ο στόχος της διπλωματικής (\hyperref[section:1-4-thesis-goal]{ενότητα 1.4}), λαμβάνοντας την απόφαση να περιοριστεί στον τομέα των μέσων κοινωνικής δικτύωσης και της ψηφιακής δημοκρατίας. |
|||
|
|||
Στα πρώτα στάδια της έρευνας εξοικειωθήκαμε με τον χώρο .... |
|||
Στη συνέχεια, πραγματοποιήθηκε έρευνα του χώρου των αποκεντρωμένων τεχνολογιών και ξεκίνησε η διαδικασία της σχεδίασης της εφαρμογής, μέσω της επιλογής του μοντέλου της τεχνολογικής στοίβας και του κατάλληλου λογισμικού σε κάθε επίπεδό της. |
|||
|
|||
Έπειτα, έγιναν μερικές πρώτες προσπάθειες για τη δημιουργία ενός proof of concept application... |
|||
Ακολούθησε η διαδικασία υλοποίησης της πιλοτικής πλατφόρμας Concordia, με στόχο να καταστεί ο αρχικός σχεδιασμός πραγματοποιήσιμος. |
|||
|
|||
Τέλος, εξήχθησαν συμπεράσματα και διατυπώθηκαν πιθανές μελλοντικές επεκτάσεις για την εφαρμογή. |
|||
|
@ -1,11 +1,12 @@ |
|||
\section{Οργάνωση κεφαλαίων} |
|||
\section{Οργάνωση κεφαλαίων}\label{section:1-6-document-structure} |
|||
|
|||
Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά παρατίθενται στα \hyperref[toc]{Περιεχόμενα}. Πιο συγκεκριμένα: |
|||
Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά διατυπώνονται στα \hyperref[toc]{Περιεχόμενα}. Πιο συγκεκριμένα: |
|||
|
|||
\begin{itemize} |
|||
\item Στο \hyperref[chapter:1-introduction]{\textbf{Κεφάλαιο 1}} |
|||
\item Στο \hyperref[chapter:2-theoretical-background]{\textbf{Κεφάλαιο 2}} |
|||
\item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} |
|||
\item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} |
|||
\item Στο \hyperref[chapter:5-conclusions]{\textbf{Κεφάλαιο 5}} |
|||
\item Στο εισαγωγικό \hyperref[chapter:1-introduction]{\textbf{Κεφάλαιο 1}} γίνεται μία σύντομη ανάλυση του όρου "αποκέντρωση", μία περιγραφή του προβλήματος και μία παρουσίαση του στόχου της εργασίας. |
|||
\item Το \hyperref[chapter:2-theoretical-background]{\textbf{Κεφάλαιο 2}} σχετίζεται με το θεωρητικό υπόβαθρο, το οποίο περιλαμβάνει όλες τις έννοιες που είναι απαραίτητες για την κατανόηση των διαδικασιών της σχεδίασης και της υλοποίησης της εφαρμογής. |
|||
\item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} αναλύεται η διαδικασία της σχεδίασης της εφαρμογής. |
|||
\item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} περιγράφεται η διαδικασία υλοποίησης της πιλοτικής εφαρμογής Concordia. |
|||
\item Στο \hyperref[chapter:5-conclusions-open-areas]{\textbf{Κεφάλαιο 5}} παρουσιάζονται τα συμπεράσματα της εργασίας (\ref{section:5-1-conclusions}), καθώς και διάφορες πιθανές μελλοντικές επεκτάσεις (\ref{section:5-2-open-areas}). |
|||
\item Τέλος, το \hyperref[{screenshots-appendix}]{\textbf{Παράρτημα Αʹ}} περιέχει στιγμιότυπα οθόνης της υλοποιημένης εφαρμογής. |
|||
\end{itemize} |
@ -0,0 +1,70 @@ |
|||
% ===== ===== |
|||
% Use case 10 |
|||
% ===== ===== |
|||
\subsection{Σενάριο χρήσης 10: Δημιουργία κοινότητας} \label{subsection:3-10-use-case-create-community} |
|||
|
|||
Το σενάριο χρήσης 10, <ΣΧ-10>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την δημιουργία μίας κοινότητας. Στους πίνακες \ref{table:3-6-use-case-create-community} και \ref{table:3-6-use-case-create-community-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-10> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-create-community-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. |
|||
|
|||
\useCaseTable |
|||
{Δημιουργώ νέα κοινότητα} |
|||
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει νέα κοινότητα.} |
|||
{\ref{srs:functional-srs-create-communities}, \ref{srs:functional-srs-assign-community-contract}} |
|||
{\ref{srs:non-functional-srs-minimize-fees}} |
|||
{Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας.} |
|||
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην αρχική σελίδα.} |
|||
{Σενάριο χρήσης 10, δημιουργία νέας κοινότητας.} |
|||
{\label{table:3-6-use-case-create-community}} |
|||
|
|||
% ===== Base flow ===== |
|||
|
|||
\useCaseBaseFlowTable |
|||
{ |
|||
1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Κοινότητας''. \\ [0.5ex] |
|||
\midrule |
|||
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex] |
|||
} |
|||
{Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} |
|||
{Σενάριο χρήσης 10 - Βασική ροή} |
|||
{\label{table:3-6-use-case-create-community-base-flow}} |
|||
|
|||
\begin{figure}[H] |
|||
\centering |
|||
\input{tikz/chapter-3/3-6-use-case-create-community-sequence-diagram} |
|||
\caption{Σενάριο χρήσης 10 - Διάγραμμα βασικής ροής} |
|||
\label{figure:3-6-use-case-create-community-base-flow-sequence-diagram} |
|||
\end{figure} |
|||
|
|||
% ===== Alternate flow ===== |
|||
|
|||
Το <ΣΧ-10> περιέχει επίσης δύο εναλλακτικές ροές που μπορεί να προκύψουν βάσει των επιλογών του χρήστη και οι οποίες περιγράφονται στους πίνακες \ref{table:3-6-use-case-create-community-alternate-flow-1} και \ref{table:3-6-use-case-create-community-alternate-flow-2}. Η εναλλακτική ροή 1 φαίνεται επίσης στο σχήμα \ref{figure:3-6-use-case-create-community-alternate-flow-1-sequence-diagram} όπου παρουσιάζεται το διάγραμμα ροής της. |
|||
|
|||
\useCaseAlternateFlowTable |
|||
{1} |
|||
{Ο χρήστης ορίζει εξωτερικό contract για την κοινότητα.} |
|||
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Συμβολαίου'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Σύνδεση Συμβολαίου''.} |
|||
{ |
|||
1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Κοινότητας'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Σύνδεση Συμβολαίου''. \\ [0.5ex] |
|||
\midrule |
|||
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί την νέα κοινότητα στο blockchain και την συνδέει με το εξωτερικό contract. \\ [0.5ex] |
|||
} |
|||
{Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} |
|||
{Σενάριο χρήσης 10 - Εναλλακτική ροή 1} |
|||
{\label{table:3-6-use-case-create-community-alternate-flow-1}} |
|||
|
|||
\begin{figure}[H] |
|||
\centering |
|||
\input{tikz/chapter-3/3-6-use-case-create-community-alternate-flow-1-sequence-diagram} |
|||
\caption{Σενάριο χρήσης 3 - Διάγραμμα εναλλακτικής ροής 1} |
|||
\label{figure:3-6-use-case-create-community-alternate-flow-1-sequence-diagram} |
|||
\end{figure} |
|||
|
|||
\useCaseAlternateFlowTable |
|||
{2} |
|||
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} |
|||
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} |
|||
{ |
|||
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. |
|||
} |
|||
{Το σενάριο χρήσης τερματίζεται.} |
|||
{Σενάριο χρήσης 10 - Εναλλακτική ροή 2} |
|||
{\label{table:3-6-use-case-create-community-alternate-flow-2}} |
@ -1,8 +1,7 @@ |
|||
\chapter{Υλοποίηση εφαρμογής}\label{chapter:4-application-implementation} |
|||
|
|||
\input{chapters/4.application-implementation/4.1.implemented-parts} |
|||
\input{chapters/4.application-implementation/4.2.implementation-methodology} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack} |
|||
\input{chapters/4.application-implementation/4.4.implementation-architecture} |
|||
\input{chapters/4.application-implementation/4.5.problems-faced} |
|||
\input{chapters/4.application-implementation/4.6.design-implementation-differences} |
|||
\input{chapters/4.application-implementation/4.1.implementation-methodology} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture} |
|||
\input{chapters/4.application-implementation/4.4.problems-faced} |
|||
\input{chapters/4.application-implementation/4.5.implemented-parts} |
|||
|
@ -1,6 +0,0 @@ |
|||
\section{Χαρακτηριστικά που υλοποιήθηκαν} |
|||
|
|||
TODO: move to last, add diagram with colors |
|||
TODO: add references to use cases implemented with screenshots of application |
|||
TODO: add unimplemented parts like serve (front and contracts) thru IPFS, upgradability |
|||
TODO: add differences in architecture |
@ -1,8 +1,8 @@ |
|||
\section{Τεχνολογίες υλοποίησης} \label{subsection:4-3-implementation-technology-stack} |
|||
\section{Τεχνολογίες υλοποίησης} \label{subsection:4-2-implementation-technology-stack} |
|||
|
|||
Η παρούσα ενότητα απαρτίζεται από υποενότητες, στις οποίες διατυπώνονται οι \textbf{σημαντικότερες} τεχνολογίες που χρησιμοποιήθηκαν για την υλοποίηση της εφαρμογής. Όλες οι τεχνολογίες αποτελούν δωρεάν λογισμικό ανοιχτού κώδικα. |
|||
|
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.development-technologies} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.2.ui-technologies} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.3.ethereum-technologies} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.4.ipfs-technologies} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies} |
@ -0,0 +1,9 @@ |
|||
\subsection{Τεχνολογίες σχετικές με το development} |
|||
|
|||
Σε αυτήν την υποενότητα περιγράφονται ορισμένα θεμελιώδη εργαλεία και frameworks που συνετέλεσαν στην ανάπτυξη της εφαρμογής. |
|||
|
|||
%TODO: Add janus and build steps diagram |
|||
|
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.1.node.js} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.2.docker} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.3.jenkins} |
@ -1,8 +1,8 @@ |
|||
\subsubsection{Node.js} \label{subsection:4-3-1-1-node.js} |
|||
\subsubsection{Node.js} \label{subsection:4-2-1-1-node.js} |
|||
|
|||
\logo{chapter-4/4.3.node.js-logo}{Node.js logo} |
|||
\logo{chapter-4/4.2.node.js-logo}{Node.js logo} |
|||
|
|||
Το Node.js\footnote{\url{https://nodejs.org/}} είναι ένα περιβάλλον χρόνου εκτέλεσης Javascript πολλαπλών πλατφορμών, το οποίο εκτελείται στη μηχανή V8\footnote{\url{https://v8.dev/}} και παρέχει τη δυνατότητα εκτέλεσης κώδικα Javascript εκτός περιηγητών ιστού. Επιτρέπει στους προγραμματιστές να χρησιμοποιούν Javascript για τη σύνταξη εργαλείων γραμμής εντολών και τη δημιουργία κλιμακωτών διαδικτυακών εφαρμογών (κυρίως για εξυπηρετητές). Έχει αρχιτεκτονική βασισμένη σε συμβάντα (event-driven architecture), με δυνατότητα ασύγχρονης εισόδου/εξόδου (asynchronous I/O).\cite{4.3-node.js} |
|||
Το Node.js\footnote{\url{https://nodejs.org/}} είναι ένα περιβάλλον χρόνου εκτέλεσης Javascript πολλαπλών πλατφορμών, το οποίο εκτελείται στη μηχανή V8\footnote{\url{https://v8.dev/}} και παρέχει τη δυνατότητα εκτέλεσης κώδικα Javascript εκτός περιηγητών ιστού. Επιτρέπει στους προγραμματιστές να χρησιμοποιούν Javascript για τη σύνταξη εργαλείων γραμμής εντολών και τη δημιουργία κλιμακωτών διαδικτυακών εφαρμογών (κυρίως για εξυπηρετητές). Έχει αρχιτεκτονική βασισμένη σε συμβάντα (event-driven architecture), με δυνατότητα ασύγχρονης εισόδου/εξόδου (asynchronous I/O).\cite{4.2-node.js} |
|||
|
|||
Ένα από τα σημαντικότερα χαρακτηριστικά του Node.js είναι ο ενσωματωμένος διαχειριστής πακέτων του, ο οποίος ονομάζεται npm. Με τον npm γίνεται εφικτή η εγκατάσταση πακέτων (βιβλιοθηκών) από το μητρώο npm (npm registry\footnote{\url{https://www.npmjs.com/}}), καθώς και η οργάνωση και η διαχείρισή τους στα πλαίσια της ανάπτυξης μίας εφαρμογής που εξαρτάται από αυτά. |
|||
|
@ -1,6 +1,6 @@ |
|||
\subsubsection{Docker} \label{subsection:4-3-1-2-docker} |
|||
\subsubsection{Docker} \label{subsection:4-2-1-2-docker} |
|||
|
|||
\logo{chapter-4/4.3.docker-logo}{Docker logo} |
|||
\logo{chapter-4/4.2.docker-logo}{Docker logo} |
|||
|
|||
Το Docker αποτελεί μία πλατφόρμα η οποία παρέχει λογισμικό εικονοποίησης (virtualization) στο επίπεδο του λειτουργικού συστήματος καθώς και ολοκληρωμένα συστήματα διαμοιρασμού και εκτέλεσης των παραγόμενων εικόνων. |
|||
|
@ -1,6 +1,6 @@ |
|||
\subsubsection{Jenkins} \label{subsection:4-3-1-3-jenkins} |
|||
\subsubsection{Jenkins} \label{subsection:4-2-1-3-jenkins} |
|||
|
|||
\logo{chapter-4/4.3.jenkins-logo}{Jenkins logo} |
|||
\logo{chapter-4/4.2.jenkins-logo}{Jenkins logo} |
|||
|
|||
Το Jenkins είναι ένας πλήρως παραμετροποιήσιμος και επεκτάσιμος διακομιστής αυτοματοποίησης (automation server). Ο διακομιστής μπορεί να αυτοματοποιήσει τις διαδικασίες ελέγχου, ολοκλήρωσης, παράδοσης και εγκατάστασης του κώδικα, υλοποιώντας έτσι βασικές διαδικασίες που ορίζει το DevOps, συνεχή έλεγχο (continuous testing), συνεχή ολοκλήρωση (continuous integration), συνεχή παράδοση (continuous delivery) και συνεχή εγκατάσταση (continuous deployment). Επίσης, το Jenkins μπορεί να παραμετροποιηθεί μέσω των ρυθμίσεων που προσφέρει και των επεκτάσεων (plugins) που υπάρχουν ώστε να παρέχει τις δυνατότητες αυτές για οποιαδήποτε πλατφόρμα, γλώσσα και περιβάλλον ανάπτυξης. |
|||
|
@ -0,0 +1,9 @@ |
|||
\subsection{Τεχνολογίες σχετικές με το UI} |
|||
|
|||
Στην παρούσα υποενότητα περιγράφονται όσες τεχνολογίες σχετίζονται με τη διεπαφή του χρήστη (UI), δηλαδή με το Presentation tier. |
|||
|
|||
% TODO: add technologies like redux, sagas |
|||
|
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.1.react} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.2.redux} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.3.redux-saga} |
@ -1,6 +1,6 @@ |
|||
\subsubsection{React} \label{subsection:4-3-2-1-react} |
|||
\subsubsection{React} \label{subsection:4-2-2-1-react} |
|||
|
|||
\logo{chapter-4/4.3.react-logo}{React logo} |
|||
\logo{chapter-4/4.2.react-logo}{React logo} |
|||
|
|||
Η React\footnote{\url{https://reactjs.org/}} αποτελεί βιβλιοθήκη Javascript, η οποία χρησιμοποιείται για την κατασκευή διεπαφών χρήστη. Είναι δηλωτική (declarative) και βασίζεται σε components, τα οποία διαχειρίζονται την κατάστασή τους (state) και συντίθενται για να δημιουργήσουν πολύπλοκα διαδραστικά UIs. |
|||
|
@ -1,6 +1,6 @@ |
|||
\subsubsection{Redux-Saga} \label{subsection:4-3-2-3-redux-saga} |
|||
\subsubsection{Redux-Saga} \label{subsection:4-2-2-3-redux-saga} |
|||
|
|||
\logo{chapter-4/4.3.redux-saga-logo}{Redux-Saga logo} |
|||
\logo{chapter-4/4.2.redux-saga-logo}{Redux-Saga logo} |
|||
|
|||
Το Redux-Saga\footnote{\url{https://redux.js.org/}} αποτελεί μία βιβλιοθήκη Javascript του οικοσυστήματος του Redux. Πρόκειται για ένα Redux middleware, το οποίο χρησιμοποιεί ESG generator functions\footnote{\url{https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*}} για την εκτέλεση και διαχείριση ποικίλων ασύγχρονων side effect. Αυτές οι συναρτήσεις (sagas) παρέχουν μία πληθώρα επιλογών για την παράλληλη εκτέλεση κώδικα που μπορεί να σχετίζεται με εξωτερικά APIs, όπως με ένα blockchain ή μία βάση δεδομένων. Με αυτόν τον τρόπο, τα τελευταία μπορούν να συμπεριληφθούν στο κεντρικό Redux store και τη διαχείριση του συνολικού state της εφαρμογής. |
|||
|
@ -1,6 +1,6 @@ |
|||
\subsection{Τεχνολογίες σχετικές με το Ethereum} \label{subsection:4-3-3-ethereum-technologies} |
|||
\subsection{Τεχνολογίες σχετικές με το Ethereum} \label{subsection:4-2-3-ethereum-technologies} |
|||
|
|||
Στην παρούσα υποενότητα περιγράφονται εκείνες οι τεχνολογίες που σχετίζονται με το Ethereum, δηλαδή με το Application tier της τεχνολογικής στοίβας. |
|||
|
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.3.ethereum-technologies/4.3.3.1.truffle} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.3.ethereum-technologies/4.3.3.2.ganache} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.1.truffle} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.2.ganache} |
@ -1,6 +1,6 @@ |
|||
\subsubsection{Truffle} \label{subsection:4-3-3-1-truffle} |
|||
\subsubsection{Truffle} \label{subsection:4-2-3-1-truffle} |
|||
|
|||
\logo{chapter-4/4.3.truffle-logo}{Truffle logo} |
|||
\logo{chapter-4/4.2.truffle-logo}{Truffle logo} |
|||
|
|||
Το Truffle\footnote{\url{https://trufflesuite.com/truffle/}} είναι ένα από τα δημοφιλέστερα Ethereum development frameworks και αποτελεί τμήμα της σουίτας Truffle. |
|||
|
@ -0,0 +1,7 @@ |
|||
\subsection{Τεχνολογίες σχετικές με το IPFS} |
|||
|
|||
Σε αυτήν την υποενότητα περιγράφονται όσες τεχνολογίες σχετίζονται με το IPFS (βλ. ενότητα \ref{section:2-7-ipfs}), δηλαδή με το Data tier της τεχνολογικής στοίβας της εφαρμογής. |
|||
|
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.1.js-ipfs} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.2.orbit-db} |
|||
\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.3.libp2p} |
@ -1,6 +1,6 @@ |
|||
\subsubsection{js-ipfs} \label{subsection:4-3-4-1-js-ipfs} |
|||
\subsubsection{js-ipfs} \label{subsection:4-2-4-1-js-ipfs} |
|||
|
|||
\logo{chapter-4/4.3.js-ipfs-logo}{js-ipfs logo} |
|||
\logo{chapter-4/4.2.js-ipfs-logo}{js-ipfs logo} |
|||
|
|||
H υλοποίηση του IPFS που χρησιμοποείται στην εφαρμογή Concordia είναι αυτή σε Javascript και ονομάζεται js-ipfs. Μέσω αυτής της βιβλιοθήκης, παρέχεται η δυνατότητα δημιουργίας ενός IPFS κόμβου, τόσο σε έναν Node.js server, όσο και σε ένα περιβάλλον browser. |
|||
|
@ -1,6 +1,6 @@ |
|||
\subsubsection{Libp2p} \label{subsection:4-3-4-3-libp2p} |
|||
\subsubsection{Libp2p} \label{subsection:4-2-4-3-libp2p} |
|||
|
|||
\logo{chapter-4/4.3.libp2p-logo}{Libp2p logo} |
|||
\logo{chapter-4/4.2.libp2p-logo}{Libp2p logo} |
|||
|
|||
Η libp2p είναι ένα αρθρωτό σύστημα πρωτοκόλλων, προδιαγραφών και βιβλιοθηκών που επιτρέπουν την ανάπτυξη p2p εφαρμογών. Αποτελεί το υποκείμενο επίπεδο δικτύου του IPFS.\ref{2.7-ipfs-docs} |
|||
|
@ -1,9 +0,0 @@ |
|||
\subsection{Τεχνολογίες σχετικές με το development} |
|||
|
|||
Σε αυτήν την υποενότητα περιγράφονται ορισμένα θεμελιώδη εργαλεία και frameworks που συνετέλεσαν στην ανάπτυξη της εφαρμογής. |
|||
|
|||
%TODO: Add janus and build steps diagram |
|||
|
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.development-technologies/4.3.1.1.node.js} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.development-technologies/4.3.1.2.docker} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.development-technologies/4.3.1.3.jenkins} |
@ -1,9 +0,0 @@ |
|||
\subsection{Τεχνολογίες σχετικές με το UI} |
|||
|
|||
Στην παρούσα υποενότητα περιγράφονται όσες τεχνολογίες σχετίζονται με τη διεπαφή του χρήστη (UI), δηλαδή με το Presentation tier. |
|||
|
|||
% TODO: add technologies like redux, sagas |
|||
|
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.2.ui-technologies/4.3.2.1.react} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.2.ui-technologies/4.3.2.2.redux} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.2.ui-technologies/4.3.2.3.redux-saga} |
@ -1,7 +0,0 @@ |
|||
\subsection{Τεχνολογίες σχετικές με το IPFS} |
|||
|
|||
Σε αυτήν την υποενότητα περιγράφονται όσες τεχνολογίες σχετίζονται με το IPFS (βλ. ενότητα \ref{section:2-7-ipfs}), δηλαδή με το Data tier της τεχνολογικής στοίβας της εφαρμογής. |
|||
|
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.4.ipfs-technologies/4.3.4.1.js-ipfs} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.4.ipfs-technologies/4.3.4.2.orbit-db} |
|||
\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.4.ipfs-technologies/4.3.4.3.libp2p} |
@ -0,0 +1 @@ |
|||
\section{Προβλήματα ανάπτυξης} \label{section:4-5-problems-faced} |
@ -0,0 +1,45 @@ |
|||
\section{Χαρακτηριστικά που υλοποιήθηκαν} \label{section:4-5-implemented-parts} |
|||
|
|||
Κατά την υλοποίηση εμφανίστηκαν διάφορα προβλήματα που δεν είχαν προβλεφθεί όπως αναλύθηκε στο προηγούμενο κεφάλαιο και τα οποία προκάλεσαν καθυστερήσεις στην ολοκλήρωση των tasks. Λόγω των καθυστερήσεων αυτών έγιναν διάφορες αναδιαμορφώσεις του προγραμματισμού των Sprint καθώς και διαπραγματεύσεις της σημαντικότητας των χαρακτηριστικών. Από τον επανασχεδιασμό και τις προσαρμογές αυτές προέκυψαν μερικές αλλαγές στο τελικό σετ των χαρακτηριστικών της πλατφόρμας σε σχέση με ό,τι είχε αρχικά προδιαγραφεί. Τα χαρακτηριστικά που υλοποιήθηκαν τελικά είναι: |
|||
|
|||
\begin{itemize} |
|||
\item η εγγραφή χρήστη και η δημιουργία των τοπικών βάσεων του όπως περιγράφεται στις \ref{srs:functional-srs-sign-up} \& \ref{srs:functional-srs-create-user-databases} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-signup} |
|||
\item η αυτόματη είσοδος χρήστη όπως περιγράφεται στην \ref{srs:functional-srs-sign-in} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-signin} |
|||
\item η δημιουργία θέματος και η δημιουργία ψηφοφοριών όπως περιγράφεται στις \ref{srs:functional-srs-create-topic} \& \ref{srs:functional-srs-create-polls} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-create-topic} |
|||
\item η περιήγηση στα υπάρχοντας θέματα όπως περιγράφεται στην \ref{srs:functional-srs-browse-topics} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-fetch-topic} |
|||
\item η δημοσίευση μηνύματος όπως περιγράφεται στην \ref{srs:functional-srs-create-post} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-create-post} |
|||
\item η επεξεργασία μηνύματος όπως περιγράφεται στην \ref{srs:functional-srs-modify-post} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-modify-post} |
|||
\item η ψήφιση σε ψηφοφορία όπως περιγράφεται στην \ref{srs:functional-srs-vote-polls} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-vote-in-poll} |
|||
\item η ψήφιση σε μηνύματα όπως περιγράφεται στην \ref{srs:functional-srs-vote-posts} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-vote-post} |
|||
\item η διαγραφή των τοπικών δεδομένων όπως περιγράφεται στην \ref{srs:functional-srs-delete-local-data} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-delete-local-data} |
|||
\end{itemize} |
|||
|
|||
Τα παραπάνω αντιστοιχούν σε 11 ολοκληρωμένες από τις 13 προδιαγεγραμμένες ΛΑ ή πλήρωση 84.6\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApps και υπερβάλλων για τα πλαίσια ενός PoC. Στο παράρτημα \ref{screenshots-appendix} παρατίθενται τα στιγμιότυπα οθόνης των υλοποιημένων χαρακτηριστικών. |
|||
|
|||
Τα χαρακτηριστικά τα οποία παραλήφθηκαν είναι τα παρακάτω: |
|||
|
|||
\begin{itemize} |
|||
\item η δημιουργία κοινοτήτων και ο ορισμός εξωτερικών contracts για τα tokens τους όπως περιγράφεται στις \ref{srs:functional-srs-create-communities} \& \ref{srs:functional-srs-assign-community-contract} και στο σενάριο χρήσης \ref{subsection:3-10-use-case-create-community} |
|||
\end{itemize} |
|||
|
|||
Τέλος, η ΜΛΑ που αφορά την ελαχιστοποίηση των fees (\ref{srs:non-functional-srs-minimize-fees}) ακολουθήθηκε κατά το δυνατόν σε όλη τη διαδικασία σχεδιασμού και υλοποίησης. Η ΜΛΑ σχετικά με την αναβαθμισιμότητα των contracts (\ref{srs:non-functional-srs-upgrade-contracts}) καταστρατηγήθηκε λόγω του χρόνου που θα απαιτούσε μία τέτοια υλοποίηση. |
|||
|
|||
Η \ref{srs:non-functional-srs-maximum-decentraliztion} απαιτεί την μεγιστοποίηση της αποκέντρωσης της πλατφόρμας. Παρότι υπάρχουν μέρη τα οποία φαινομενικά έχει παραβιαστεί, όπως η διάθεση της εφαρμογής και των contract artifacts μέσω κεντροποιημένων servers καθώς και η ύπαρξη του rendezvous server, στην πραγματικότητα έχει ακολουθηθεί σε ικανοποιητικό βαθμό. Σχετικά με την εφαρμογή και τα contracts, πάρθηκε η απόφαση να διατεθούν μέσω των αντίστοιχων servers επειδή αυτό προσφέρει μεγάλη ευελιξία και ευκολία στην ανάπτυξη. Θα μπορούσαν εύκολα να διατεθούν μέσω αποκεντρωμένων συστημάτων όπως torrents ή το IPFS και αυτό παραμένει ένα ανοιχτό θέμα. Επίσης ανοιχτό θέμα παραμένει η ανάγκη ύπαρξης του rendezvous server. Λόγω της φύσης του πρωτοκόλλου IPFS και της λειτουργίας που επιτελεί ο server αυτός, είναι αδύνατον να παραληφθεί, ωστόσο είναι ανοιχτό ερευνητικό πεδίο η περαιτέρω αποκέντρωση του πρωτοκόλλου. |
|||
% https://mnot.github.io/avoiding-internet-centralization/draft-nottingham-avoiding-internet-centralization.html#name-necessary-centralization |
|||
|
|||
\subsection{Διαφορές σχεδιασμού-υλοποίησης} \label{subsection:4-6-1-design-implementation-differences} |
|||
|
|||
Σημαντικές διαφορές υπήρξαν επίσης στην διαδικασία υλοποίησης τόσο όσον αφορά τον αριθμό και τις λειτουργίες των διαφορετικών πακέτων λογισμικού όσο και τον χρονοπρογραμματισμό. Προστέθηκαν τρεις νέες υπηρεσίες, η υπηρεσία "Concordia Contracts Provider", ο προσαρμοσμένος IPFS pinner και η ιστοσελίδα "Concordia Guide". |
|||
|
|||
Η ανάγκη για τα νέα πακέτα λογισμικού προέκυψε κατά την πορεία υλοποίησης της διπλωματικής και προστέθηκαν στον χρονοπρογραμματισμό που είχε γίνει στην αρχή της εργασίας. Στην προσαρμογή αυτή βοήθησαν ιδιαίτερα οι Agile τακτικές που ακολουθήθηκαν και η προσαρμοστικότητα που προσφέρει το Scrum σε μεταβαλλόμενες απαιτήσεις. |
|||
|
|||
Τέλος, κατά την υλοποίηση έγινε γρήγορα αντιληπτή η αξία που προσφέρουν ένα δοκιμαστικό περιβάλλον (staging environment) σε συνδυασμό με ένα CI/CD σύστημα. Για το λόγο αυτό πάρθηκε η απόφαση να μεταφερθεί το sprint που αφορούσε αυτά πολύ νωρίτερα στην διαδικασία υλοποίησης, ώστε να μεγιστοποιηθεί η χρήση του. |
|||
|
|||
Εποπτικά, η διαδικασία της υλοποίησης περιγράφεται στο παρακάτω σχήμα (σχήμα \ref{figure:4.6.design-implementation-differences-sprints}). Με σκούρο πράσινο χρώμα εμφανίζονται τα tasks τα οποία υπήρχαν στο χρονοπρογραμματισμό από τη αρχή και υλοποιήθηκαν, με ανοιχτό πράσινο αυτά τα οποία δεν υπήρχαν στον αρχικό προγραμματισμό αλλά υλοποιήθηκαν και με κόκκινο αυτά τα οποία δεν υλοποιήθηκαν. |
|||
|
|||
\begin{figure}[H] |
|||
\centering |
|||
\includegraphics[width=\textwidth]{assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png} |
|||
\caption{Διαχωρισμός σε sprints} |
|||
\label{figure:4.6.design-implementation-differences-sprints} |
|||
\end{figure} |
@ -1 +0,0 @@ |
|||
\section{Προβλήματα ανάπτυξης} |
@ -1 +0,0 @@ |
|||
\section{Διαφορές σχεδιασμού-υλοποίησης} \label{section:4-5-design-implementation-differen} |
@ -0,0 +1,4 @@ |
|||
\chapter[Συμπεράσματα και ανοιχτά θέματα]{Συμπεράσματα \\και ανοιχτά θέματα}\label{chapter:5-conclusions-open-areas} |
|||
|
|||
\input{chapters/5.conclusions-open-areas/5.1.conclusions} |
|||
\input{chapters/5.conclusions-open-areas/5.2.open-areas} |
@ -0,0 +1,20 @@ |
|||
\section{Συμπεράσματα}\label{section:5-1-conclusions} |
|||
|
|||
Συνοψίζοντας, μέσω της ανάπτυξης της πιλοτικής εφαρμογής Concordia γίνεται φανερό ότι είναι εφικτή η υλοποίηση μίας πλήρως αποκεντρωμένης κοινωνικής πλατφόρμας, η οποία να εκπληρώνει τον στόχο που τέθηκε στην \hyperref[section:1-4-thesis-goal]{ενότητα 1.4}, σύμφωνα με τον σχεδιασμό του \hyperref[chapter:3-application-design]{κεφαλαίου 3}. |
|||
|
|||
Μέσω της αρχιτεκτονικής αποκέντρωσης των τριών επιπέδων της τεχνολογικής στοίβας (βλ. \hyperref[section:3-2-technology-stack]{ενότητα 3.2}), δημιουργείται ένα πολιτικά αποκεντρωμένος ψηφιακός χώρος, ο οποίος κατοχυρώνει την ελευθερία του λόγου των συμμετεχόντων και παρέχει παντοδύναμες αυθεντικές δημοκρατικές διαδικασίες. |
|||
|
|||
Ωστόσο, θα πρέπει να επισημανθεί ότι η εφαρμογή χαρακτηρίζεται από ορισμένα μειονεκτήματα, τα οποία σχετίζονται, κυρίως, με την πρώιμη κατάσταση ανάπτυξης των επιλεγμένων τεχνολογιών: |
|||
|
|||
\begin{itemize} |
|||
\item Στο Application tier, μέσω της χρήσης του Ethereum, εισάγονται όλα εκείνα τα ζητήματα που συνοδεύουν επί του παρόντος το blockchain και τα smart contracts. Τα βασικότερα από αυτά είναι τα τέλη των συναλλαγών, η ανάγκη χρήσης επιπρόσθετων λογισμικών (π.χ. MetaMask) και η κλιμακοθετησιμότητά (scalability) των DApp. Σε γενικές γραμμές, το κλίμα στην παγκόσμια προγραμματιστική κοινότητα παραμένει αρκέτα πολωμένο ως προς το αν τελικά πλατφόρμες όπως το Ethereum θα μπορέσουν να ξεπεράσουν τα διάφορα προβλήματα και να ανταπεξέλθουν στις προσδοκίες. |
|||
|
|||
\begin{enumitemcenteredfigure} |
|||
\includegraphics[width=.50\textwidth]{assets/figures/chapter-5/5.1.xkcd_2030_voting_software} |
|||
\caption{\url{https://xkcd.com/2030/}} |
|||
\end{enumitemcenteredfigure} |
|||
|
|||
\item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, τα οποία σχετίζονται κυρίως με την εύρεση των peers (το οποίο βασίζεται προσωρινά σε signalling servers\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}) και το replication των δεδομένων. |
|||
\end{itemize} |
|||
|
|||
Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση. |
@ -0,0 +1,48 @@ |
|||
\section{Ανοιχτά θέματα}\label{section:5-2-open-areas} |
|||
|
|||
\subsection{Διαχείριση των τελών του Ethereum}\label{subsection:5-2-1-ethereum-fees-management} |
|||
|
|||
Οι ανάγκες κάθε υπολογιστικού συστήματος σε πόρους που σχετίζονται με τις διάφορες λειτουργίες του (π.χ. επεξεργασία, αποθήκευση δεδομένων, δίκτυα) μεταφράζονται σε κάποιο οικονομικό κόστος. Στην περίπτωση της παρούσας εφαρμογής, ενώ η αποθήκευση των δεδομένων διαμοιράζεται αυτοβούλως ανάμεσα στους συμμετέχοντες κόμβους, η χρήση του Ethereum απαιτεί από τα μέλη την καταβολή τελών για τη δημιουργία συναλλαγών. Αν και αυτά τα τέλη είναι απαραίτητα για τη λειτουργία του blockchain και την προάσπισή του από επιθέσεις, αποτελούν ισχυρό εμπόδιο για την ένταξη των τελικών χρηστών στο οικοσύστημα των αποκεντρωμένων εφαρμογών του Ethereum. |
|||
|
|||
Στα πλαίσια της εφαρμογής Concordia, η λήψη μέτρων για τη διαχείριση των τελών θεωρείται υψίστης σημασίας. Ωστόσο, η συμπερίληψη ενός τέτοιου μηχανισμού θα περιέπλεκε εξαιρετικά τον σχεδιασμό της και, ως εκ τούτου, λήφθηκε η απόφαση να συμπεριληφθεί ως πρόταση για μελλοντική της επέκταση. Ένας τέτοιος μηχανισμός θα παρείχε τη δυνατότητα στα μέλη της πλατφόρμας να τη χρησιμοποιούν χωρίς να κατέχουν ή να δαπανούν ETH. Αυτό θα ήταν εφικτό μέσω της χρήσης "μετασυναλλαγών"\footnote{Μετασυναλλαγή (meta-transaction) θεωρείται μία συναλλαγή που υπογράφεται από τον Ethereum λογαριασμό του χρήστη και προωθείται σε κάποιον τρίτο για να την εκτελέσει επί του blockchain.}, οι οποίες θα μεταβίβαζαν την αποπληρωμή των τελών στις κοινότητες που ανήκουν οι χρήστες. |
|||
|
|||
Αυτή τη στιγμή υπάρχουν ήδη προσεγγίσεις υλοποιήσεων τέτοιου είδους μηχανισμών, όπως το Gas Station Network\footnote{\url{https://opengsn.org/}}, ενώ η προγραμματιστική ομάδα του Ethereum εργάζεται ενεργά για την εγγενή υποστήριξη αυτής της δυνατότητας από την ίδια την πλατφόρμα. |
|||
|
|||
\subsection{Διανομή των Ethereum token}\label{subsection:5-2-2-token-distribution} |
|||
|
|||
Στον φυσικό κόσμο, η έγκυρη και ανώνυμη διανομή ενός συνόλου μοναδικών πιστοποιητικών αυθεντικοποίησης στα μέλη μίας κοινότητας θα μπορούσε να ήταν μία διαδικασία, η οποία να απαιτούσε την φυσική παρουσία των χρηστών και την επιλογή ενός λαχνού-πιστοποιητικού από μία κληρωτίδα. Σε αυτήν την περίπτωση θα έπρεπε είτε να υπήρχε ολομέλεια και, έτσι, διαμοιρασμός της εμπιστοσύνης σε όλα τα μέλη, είτε να υπήρχε μεταβίβαση της εμπιστοσύνης σε μία επιτροπή. |
|||
|
|||
Στον ψηφιακό κόσμο, το παραπάνω ζήτημα αποτελεί μία ιδιαίτερη πρόκληση με ποικίλες προσεγγίσεις σχετικά με την επιλογή των συστημάτων που θα χρησιμοποιηθούν, καθώς και των οντοτήτων στις οποίες θα εκχωρηθεί εμπιστοσύνη. |
|||
|
|||
Στην παρούσα εφαρμογή, η υλοποίηση μηχανισμών για την ανώνυμη διανομή των Ethereum token των κοινοτήτων με τρόπο που να μην απαιτείται η εκχώρηση εμπιστοσύνης σε τρίτους, τέθηκε εκτός του πλαισίου της εργασίας, εξαιτίας της παρέκκλισης από το κεντρικό θέμα και της πολυπλοκότητας της. Όπως είναι σχεδιασμένη αυτήν τη στιγμή, η Concordia δύναται να υποστηρίξει ποικίλες αφηρημένες διαδικασίες οι οποίες να κατοχυρώνουν την εγκυρότητα των εκάστοτε μελών, αλλά όχι την ανωνυμία τους. Εκείνη, όσο η διαδικασία βασίζεται σε κάποια κεντρική οντότητα αυθεντικοποίησης, δε μπορεί να διασφαλιστεί, καθώς θα απαιτεί πάντα την εκχώρηση εμπιστοσύνης από τον τελικό χρήστη στα υπολογιστικά συστήματα της πρώτης. Η εμφάνιση του προβλήματος οφείλεται στο γεγονός ότι η ανωνυμοποίηση των πιστοποιητικών θα πρέπει να λάβει χώρα εντός των των προαναφερθέντων συστημάτων, τα οποία, ως επί το πλείστον, θα είναι συγκεντρωτικής λογικής. |
|||
|
|||
Για παράδειγμα, έστω ότι μία κεντρική αρχή με δικό της σύστημα αυθεντικοποίησης αρχιτεκτονικής πελάτη-εξυπηρετητή αποφασίζει να συμμετάσχει στην πλατφόρμα της Concordia, δημιουργώντας μία κοινότητα και ορίζοντας ένα εξωτερικό smart contract για τα token των μελών της. Ο μηχανισμός διανομής των token θα μπορούσε να ήταν η εγγραφή του χρήστη στο κεντρικό σύστημα της αρχής, η δήλωση μίας Ethereum διεύθυνσής του και η αποστολή ενός token αυθεντικοποίησης σε αυτήν. Κάτι τέτοιο θα έδινε τη δυνατότητα στους διαχειριστές του συστήματος να εντοπίζουν με ευκολία τις πραγματικές ταυτότητες των μελών της κοινότητας πίσω από κάθε token της, αίροντας, έτσι, την ανωνυμία των τελευταίων. |
|||
|
|||
Λύση στο παραπάνω πρόβλημα μπορεί να επέλθει μόνο με την υλοποίηση μίας διαδικασίας ανωνυμοποίησης των token επί του blockchain. Αυτό απαιτεί την ύπαρξη ενός μηχανισμού στο οικοσύστημα του Ethereum, ο οποίος να παρέχει τη δυνατότητα μεταφοράς των token αποκρύπτοντας τις διευθύνσεις προέλευσης και προορισμού τους. Έτσι, οι χρήστες απλώς θα μετακινούσαν τα token που αρχικά παρέλαβαν σε μία διεύθυνση μη προσδιορίσιμη από τρίτους. |
|||
|
|||
Στο ευρύτερο οικοσύστημα των blockchain υπάρχουν ήδη υλοποιήσεις που προσφέρουν αυτήν την δυνατότητα επί του εγγενούς τους νομίσματος (π.χ. Monero, Zcash), ενώ διάφορες ομάδες εργάζονται ενεργά για την ανάπτυξη τέτοιων μηχανισμών και στο Ethereum. Αν και υπάρχουν διαφοροποιήσεις στις προσεγγίσεις τους, η κύρια τεχνολογία στην οποία βασίζονται είναι αυτή των λεγόμενων "zero knowledge proof", με επικρατέστερα πρωτόκολλα τα zk-SNARK και zk-STARK. Ως μία ήδη λειτουργική λύση τύπου μίκτη συναλλαγών θα μπορούσε να θεωρηθεί ο Tornado\footnote{\url{https://tornado.cash/}}, ο οποίος παρέχει τη δυνατότητα ανώνυμης μεταφοράς ETH ή ERC20 token αξιοποιώντας τα zk-SNARK.\cite{5.2-privacy-on-ethereum} |
|||
|
|||
\subsection{Εναλλακτικά συστήματα ψηφοφορίας}\label{subsection:5-2-3-alternative-voting-systems} |
|||
|
|||
Επί του παρόντος, η εφαρμογή λειτουργεί αποκλειστικά αμεσοδημοκρατικά, με καθολικές ψηφοφορίες και ισάξιες ψήφους, όπως ορίζεται από το έξυπνο συμβόλαιο \texttt{Voting.sol}. |
|||
|
|||
Τροποποιώντας την τρέχουσα υλοποίηση, η πλατφόρμα μπορεί να υποστηρίξει εναλλακτικά συστήματα ψηφοφορίας, μέσω της ανάπτυξης προσαρμοσμένων έξυπνων συμβολαίων. Αυτό θα έχει ως αποτέλεσμα να παρέχεται στην κάθε κοινότητα η δυνατότητα να ορίσει το voting smart contract που επιθυμεί, ανάλογα με τις ανάγκες και τις επιδιώξεις της. |
|||
|
|||
Μερικά συστήματα ψηφοφοριών που μπορούν να ενσωματωθούν (και ακόμα και να συνδυαστούν) στην πλατφόρμα είναι τα παρακάτω: |
|||
|
|||
\begin{itemize} |
|||
\item Ψήφοφορία με σειρά προτίμησης (ranked voting): το εκλογικό σώμα θα έχει τη δυνατότητα να ψηφίζει με σειρά προτίμησης μεταξύ των διαθέσιμων επιλογών των ψηφοφοριών. |
|||
\item Πολλαπλή ψήφος: ορισμένοι ψηφοφόροι θα έχουν ισχυρότερη ψήφο βάσει κάποιου κριτηρίου (π.χ. βάσει του reputation τους). |
|||
\item Έμμεση ψηφοφορία: κάθε μέλος θα ορίζει αντιπρόσωπο για μία ή περισσότερες ψηφοφορίες, για ορισμένο ή αόριστο χρονικό διάστημα. |
|||
\item Μερική ψηφοφορία: επιβολή περιρισμών στο δικαίωμα ψήφου, βάσει κάποιου κριτηρίου (π.χ. ημερομηνία εγγραφής χρήστη). |
|||
\end{itemize} |
|||
|
|||
Φυσικά τα παραπάνω είναι καθαρά ενδεικτικά, πράγμα που σημαίνει ότι θα είναι εφικτό να μπορούν να δημιουργούνται εντελώς διαφορετικά συμβόλαια συστημάτων ψηφοφορίας, ανά πάσα στιγμή και από τον οποιονδήποτε. Η δε σύνδεσή τους με την εφαρμογή θα είναι όμοια με τα ήδη υλοποιημένα, αφού η μοναδική απαιτούμενη ενέργεια θα είναι η αποθήκευση ενός pointer προς το voting contract της εκάστοτε κοινότητας. |
|||
|
|||
\subsection{Συστήματα απόδοσης εμπιστοσύνης}\label{subsection:5-2-4-reputation-systems} |
|||
|
|||
Μία επιπλέον προσθήκη στην εφαρμογή μπορεί είναι ένα σύστημα απόδοσης εμπιστοσύνης (reputation system). Μέσω ενός reputation system, οι χρήστες μπορούν να κερδίζουν ή να χάνουν βαθμούς εμπιστοσύνης, με τον τρόπο που ορίζεται από το εκάστοτε smart contract. |
|||
|
|||
Ορισμένες ενδεικτικές χρήσεις του είναι η συνεργασία του με τους μηχανισμούς που περιγράφονται στις υποενότητες \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} Ωστόσο, η περαιτέρω ανάλυση τους, είναι θέμα που εκτείνεται πέρα από τα πλαίσια της παρούσας διπλωματικής εργασίας. |
@ -1,4 +0,0 @@ |
|||
\chapter{Συμπεράσματα}\label{chapter:5-conclusions} |
|||
|
|||
\input{chapters/5.conclusions/5.1.open-areas} |
|||
\input{chapters/5.conclusions/5.2.conclusion} |
@ -1,8 +0,0 @@ |
|||
\section{Ανοιχτά θέματα} |
|||
|
|||
TODO: add |
|||
1. feeless |
|||
2. reputation system |
|||
3. voting types |
|||
4. token distribution |
|||
5. ethereum, ipfs, move to proof of stake, remove of rendezvous server |
@ -1 +0,0 @@ |
|||
\section{Επίλογος} |
@ -0,0 +1 @@ |
|||
\input{chapters/appendix/screenshots-appendix} |
@ -0,0 +1,4 @@ |
|||
\chapter*{Παράρτημα Αʹ\\[20pt]Στιγμιότυπα οθόνης πλατφόρμας}\label{screenshots-appendix} |
|||
\addcontentsline{toc}{section}{Αʹ Στιγμιότυπα οθόνης πλατφόρμας} |
|||
|
|||
% TODO: add screenshots of application |
@ -0,0 +1,2 @@ |
|||
\renewcommand{\appendixtocname}{Παραρτήματα} |
|||
\renewcommand{\appendixpagename}{Παραρτήματα} |
@ -0,0 +1,21 @@ |
|||
\begin{sequencediagram} |
|||
\newthread{actor}{Actor}{} |
|||
\newinst[4]{concordia}{:Concordia}{} |
|||
\newinst[4]{eth}{:Ethereum}{} |
|||
\newinst{orbit}{:OrbitDb}{} |
|||
|
|||
\begin{call}{actor}{Create community}{concordia}{Community creation form} |
|||
\end{call} |
|||
|
|||
\begin{call}{actor}{Add external contract}{concordia}{External contract form} |
|||
\end{call} |
|||
|
|||
\begin{call}{actor}{Submit}{concordia}{Created community page} |
|||
|
|||
\begin{call}{concordia}{Create community}{eth}{New community ID} |
|||
\end{call} |
|||
|
|||
\begin{call}{concordia}{Connect external contract}{eth}{} |
|||
\end{call} |
|||
\end{call} |
|||
\end{sequencediagram} |
@ -0,0 +1,16 @@ |
|||
\begin{sequencediagram} |
|||
\newthread{actor}{Actor}{} |
|||
\newinst[3]{concordia}{:Concordia}{} |
|||
\newinst[2]{eth}{:Ethereum}{} |
|||
\newinst[1]{orbit}{:OrbitDb}{} |
|||
|
|||
\begin{call}{actor}{Create community}{concordia}{Community creation form} |
|||
\end{call} |
|||
|
|||
\begin{call}{actor}{Submit}{concordia}{Created community page} |
|||
|
|||
\begin{call}{concordia}{Create community}{eth}{New community ID} |
|||
\end{call} |
|||
|
|||
\end{call} |
|||
\end{sequencediagram} |