Browse Source

Merge branch 'develop' into feature/4-application-implementation

develop
Ezerous 3 years ago
parent
commit
5b941235d9
  1. BIN
      assets/figures/chapter-2/2.1.hash-functions-1.png
  2. BIN
      assets/figures/chapter-2/2.1.hash-functions-2.png
  3. BIN
      assets/figures/chapter-2/2.4.p2p-networks.png
  4. BIN
      assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png
  5. BIN
      assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png
  6. BIN
      assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png
  7. BIN
      assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png
  8. 5
      bibliography/references.bib
  9. 4
      chapters/0.preamble/0.1.summary.tex
  10. 7
      chapters/0.preamble/0.2.abstract.tex
  11. 3
      chapters/1.introduction/1.0.introduction.tex
  12. 9
      chapters/1.introduction/1.6.typography.tex
  13. 6
      chapters/1.introduction/1.7.document-structure.tex
  14. 4
      chapters/2.theoretical-background/2.1.hash-functions.tex
  15. 2
      chapters/2.theoretical-background/2.3.merkle-trees.tex
  16. 8
      chapters/2.theoretical-background/2.4.p2p-networks.tex
  17. 2
      chapters/2.theoretical-background/2.5.blockchain.tex
  18. 3
      chapters/2.theoretical-background/2.7.ipfs.tex
  19. 2
      chapters/3.application-design/3.0.application-design.tex
  20. 6
      chapters/3.application-design/3.1.idea-conception.tex
  21. 6
      chapters/3.application-design/3.4.user-categories.tex
  22. 20
      chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex
  23. 16
      chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex
  24. 16
      chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex
  25. 10
      chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex
  26. 10
      chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex
  27. 2
      chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex
  28. 4
      chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex
  29. 2
      chapters/3.application-design/3.7.architecture-design.tex
  30. 8
      chapters/3.application-design/3.8.implementation-methodology-specification.tex
  31. 8
      chapters/4.application-implementation/4.3.implementation-architecture/4.3.9.data-flow.tex
  32. 2
      chapters/4.application-implementation/4.5.implemented-parts.tex
  33. 6
      chapters/5.conclusions-open-areas/5.1.conclusions.tex
  34. 2
      chapters/appendix/appendix-a.tex
  35. 56
      chapters/appendix/appendix-b.tex
  36. 3
      chapters/appendix/appendix.tex
  37. 19
      custom-commands/appendix-code-stats.tex
  38. 18
      misc/packages.tex
  39. BIN
      thesis.pdf
  40. 3
      thesis.tex

BIN
assets/figures/chapter-2/2.1.hash-functions-1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

BIN
assets/figures/chapter-2/2.1.hash-functions-2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 KiB

After

Width:  |  Height:  |  Size: 411 KiB

BIN
assets/figures/chapter-2/2.4.p2p-networks.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 KiB

After

Width:  |  Height:  |  Size: 737 KiB

BIN
assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

BIN
assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

BIN
assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 974 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

5
bibliography/references.bib

@ -95,11 +95,6 @@
title = {IPFS documentation}, title = {IPFS documentation},
url = {https://docs.ipfs.io/} url = {https://docs.ipfs.io/}
} }
@misc{2.7-merkle-dags-proto-school,
title = {Merkle DAGs: Structuring Data for the Distributed Web},
author = {ProtoSchool},
url = {https://proto.school/merkle-dags/}
}
@online{4.1-github-flow, @online{4.1-github-flow,
title = {Understanding the GitHub flow}, title = {Understanding the GitHub flow},
author = {GitHub Guides}, author = {GitHub Guides},

4
chapters/0.preamble/0.1.summary.tex

@ -4,7 +4,7 @@
Τις τελευταίες δεκαετίες, η ραγδαία ανάπτυξη του διαδικτύου μετέβαλε ριζικά τις ανθρώπινες Τις τελευταίες δεκαετίες, η ραγδαία ανάπτυξη του διαδικτύου μετέβαλε ριζικά τις ανθρώπινες
κοινωνίες, μέσω μίας πληθώρας ψηφιακών εφαρμογών, οι οποίες, στη συντριπτική τους πλειοψηφία, προσφέρονται από παρόχους υπηρεσιών υπολογιστικού νέφους, ακολουθώντας την αρχιτεκτονική πελάτη-εξυπηρετητή. κοινωνίες, μέσω μίας πληθώρας ψηφιακών εφαρμογών, οι οποίες, στη συντριπτική τους πλειοψηφία, προσφέρονται από παρόχους υπηρεσιών υπολογιστικού νέφους, ακολουθώντας την αρχιτεκτονική πελάτη-εξυπηρετητή.
Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτα απ' όλα, ο χρήστης καλείται να εμπιστευθεί τα προσωπικά του δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, αποκτάει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής. Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτον, οι χρήστες καλούνται να εμπιστευθούν τα προσωπικά τους δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, αποκτάει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής.
Αυτοί είναι μερικοί βασικοί λόγοι που συνετέλεσαν στην ταχεία ανάπτυξη ενός συνόλου καινοτόμων λογισμικών ανοιχτού κώδικα, τα οποία βασίζονται σε τεχνολογίες όπως το blockchain και τα δίκτυα ομότιμων κόμβων. Τα παραπάνω, αν και βρίσκονται σε σχετικά πρώιμο στάδιο, αποτελούν ήδη ισχυρά εργαλεία δημιουργίας κατανεμημένων και αποκεντρωμένων εφαρμογών. Αυτοί είναι μερικοί βασικοί λόγοι που συνετέλεσαν στην ταχεία ανάπτυξη ενός συνόλου καινοτόμων λογισμικών ανοιχτού κώδικα, τα οποία βασίζονται σε τεχνολογίες όπως το blockchain και τα δίκτυα ομότιμων κόμβων. Τα παραπάνω, αν και βρίσκονται σε σχετικά πρώιμο στάδιο, αποτελούν ήδη ισχυρά εργαλεία δημιουργίας κατανεμημένων και αποκεντρωμένων εφαρμογών.
@ -12,6 +12,6 @@
η οποία, αξιοποιώντας τεχνολογίες αποκέντρωσης, αφενός θα επιστρέφει την κυριότητα των προσωπικών η οποία, αξιοποιώντας τεχνολογίες αποκέντρωσης, αφενός θα επιστρέφει την κυριότητα των προσωπικών
δεδομένων στον χρήστη, αφετέρου θα παρέχει τη δυνατότητα διενέργειας διαφανών δημοκρατικών ψηφοφοριών. Αυτά μέσα σε ένα πλαίσιο ανθεκτικό, τόσο σε σφάλματα και επιθέσεις, όσο και σε απόπειρες λογοκρισίας και παραποίησης. δεδομένων στον χρήστη, αφετέρου θα παρέχει τη δυνατότητα διενέργειας διαφανών δημοκρατικών ψηφοφοριών. Αυτά μέσα σε ένα πλαίσιο ανθεκτικό, τόσο σε σφάλματα και επιθέσεις, όσο και σε απόπειρες λογοκρισίας και παραποίησης.
Η αναπτυχθείσα πιλοτική εφαρμογή "Concordia" προσεγγίζει τον παραπάνω στόχο συνδυάζοντας τα Ethereum και IPFS, ώστε να ορίσει έναν αποκεντρωμένο ψηφιακό χώρο, τόσο σε αρχιτεκτονικό όσο και πολιτικό επίπεδο. Η αναπτυχθείσα πιλοτική εφαρμογή "Concordia" προσεγγίζει τον παραπάνω στόχο συνδυάζοντας τις τεχνολογίες Ethereum και IPFS, ώστε να ορίσει έναν αποκεντρωμένο ψηφιακό χώρο, τόσο σε αρχιτεκτονικό όσο και πολιτικό επίπεδο.
\\[2\baselineskip] \\[2\baselineskip]
\textbf{Λέξεις-Κλειδιά}: Αποκεντροποίηση, Ethereum, Blockchain, Έξυπνο Συμβόλαιο, Αποκεντρωμένη Εφαρμογή, IPFS, OrbitDB, React, Redux, Jenkins \textbf{Λέξεις-Κλειδιά}: Αποκεντροποίηση, Ethereum, Blockchain, Έξυπνο Συμβόλαιο, Αποκεντρωμένη Εφαρμογή, IPFS, OrbitDB, React, Redux, Jenkins

7
chapters/0.preamble/0.2.abstract.tex

@ -1,12 +1,11 @@
\chapter*{Abstract} \chapter*{Abstract}
\addcontentsline{toc}{chapter}{Abstract} \addcontentsline{toc}{chapter}{Abstract}
\textenglish{In recent decades, the rapid growth of the internet has radically changed human \textenglish{In recent decades, the rapid growth of the internet has radically changed society, through a plethora of digital applications, the vast majority of which are offered by cloud computing service providers, following the client-server architecture.
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. Furthermore, 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. 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. Firstly, users are required to trust their 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. Furthermore, 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 technologies such as blockchain and peer-to-peer networks. The aforementioned, although at a relatively early stage, are already powerful tools for creating distributed and decentralized applications. 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 technologies such as blockchain and peer-to-peer networks. The aforementioned technologies, although at a relatively early stage, are already powerful tools for creating distributed and decentralized applications.
The goal of this thesis is the implementation of an autonomous social platform, The goal 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 data to the end user, on the other hand will provide transparent democratic voting processes. These in a context resistant to both faults and attacks, as well as attempts at censorship and falsification. which, by utilizing decentralization technologies, on the one hand will return the ownership of the data to the end user, on the other hand will provide transparent democratic voting processes. These in a context resistant to both faults and attacks, as well as attempts at censorship and falsification.

3
chapters/1.introduction/1.0.introduction.tex

@ -5,4 +5,5 @@
\input{chapters/1.introduction/1.3.problem-definition} \input{chapters/1.introduction/1.3.problem-definition}
\input{chapters/1.introduction/1.4.thesis-goal} \input{chapters/1.introduction/1.4.thesis-goal}
\input{chapters/1.introduction/1.5.methodology} \input{chapters/1.introduction/1.5.methodology}
\input{chapters/1.introduction/1.6.document-structure} \input{chapters/1.introduction/1.6.typography}
\input{chapters/1.introduction/1.7.document-structure}

9
chapters/1.introduction/1.6.typography.tex

@ -0,0 +1,9 @@
\section{Τυπογραφικές παραδοχές} \label{section:1-6-typography}
Το παρόν έγγραφο αποτυπώνεται με τη γραμματοσειρά Linux Libertine O\footnote{\url{https://libertine-fonts.org/}}, ενώ για τα κομμάτια κώδικα χρησιμοποιείται η Hack\footnote{\url{https://sourcefoundry.org/hack/}}. Το μέγεθος του κυρίως κειμένου είναι 12pt και το διάστιχό του είναι επαυξημένο του προκαθορισμένου κατά το ήμισυ για άνεση κατά την ανάγνωση.
Καταβάλλεται η μέγιστη δυνατή προσπάθεια για τη χρήση ελληνικών όρων, όπου αυτό είναι εφικτό, με τους αντίστοιχους αγγλικούς να τους συνοδεύουν σε ακόλουθες παρενθέσεις. Τα εισαγωγικά που χρησιμοποιούνται είναι τα διπλά γωνιώδη (« »), τόσο για ελληνικούς, όσο και για ξενόγλωσσους χαρακτηρισμούς.
Επίσης, αριθμούνται επί της συνολικής έκτασης της εργασίας οι λεζάντες των σχημάτων και των πινάκων, οι υποσημειώσεις και οι βιβλιογραφικές αναφορές, με τις τελευταίες να παρατίθενται στο τέλος του εγγράφου.
Τέλος, επισημαίνεται ότι η συγγραφή της αναφοράς πραγματοποιήθηκε στο ηλεκτρονικό τυπογραφικό σύστημα \LaTeX. Ο πηγαίος της κώδικας μπορεί να βρεθεί στο αντίστοιχο αποθετήριο κώδικα της διπλωματικής εργασίας\footnote{\url{https://gitlab.com/ecentrics/thesis-report}.}.

6
chapters/1.introduction/1.6.document-structure.tex → chapters/1.introduction/1.7.document-structure.tex

@ -1,4 +1,4 @@
\section{Οργάνωση κεφαλαίων}\label{section:1-6-document-structure} \section{Οργάνωση κεφαλαίων}\label{section:1-7-document-structure}
Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά διατυπώνονται στα \hyperref[toc]{Περιεχόμενα}. Πιο συγκεκριμένα: Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά διατυπώνονται στα \hyperref[toc]{Περιεχόμενα}. Πιο συγκεκριμένα:
@ -8,5 +8,7 @@
\item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} αναλύεται η διαδικασία της σχεδίασης της εφαρμογής. \item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} αναλύεται η διαδικασία της σχεδίασης της εφαρμογής.
\item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} περιγράφεται η διαδικασία υλοποίησης της πιλοτικής εφαρμογής Concordia. \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[chapter:5-conclusions-open-areas]{\textbf{Κεφάλαιο 5}} παρουσιάζονται τα συμπεράσματα της εργασίας (\ref{section:5-1-conclusions}), καθώς και διάφορες πιθανές μελλοντικές επεκτάσεις (\ref{section:5-2-open-areas}).
\item Τέλος, το \hyperref[{screenshots-appendix}]{\textbf{Παράρτημα Αʹ}} περιέχει στιγμιότυπα οθόνης της υλοποιημένης εφαρμογής. \item Το \hyperref[{appendix-a}]{\textbf{Παράρτημα Αʹ}} περιέχει στιγμιότυπα οθόνης της υλοποιημένης εφαρμογής.
\item Το \hyperref[{appendix-b}]{\textbf{Παράρτημα Βʹ}} περιλαμβάνει πίνακες με στατιστικά του αναπτυχθέντα κώδικα.
\item Τέλος, παρατίθενται οι \textbf{βιβλιογραφικές αναφορές} που χρησιμοποιήθηκαν στο κείμενο.
\end{itemize} \end{itemize}

4
chapters/2.theoretical-background/2.1.hash-functions.tex

@ -4,7 +4,7 @@
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.1.hash-functions-1.png} \includegraphics[width=.9\textwidth]{assets/figures/chapter-2/2.1.hash-functions-1.png}
\caption{Λειτουργία συνάρτησης κατακερματισμού} \caption{Λειτουργία συνάρτησης κατακερματισμού}
\end{figure} \end{figure}
@ -19,7 +19,7 @@
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.1.hash-functions-2.png} \includegraphics[width=.9\textwidth]{assets/figures/chapter-2/2.1.hash-functions-2.png}
\caption{Παράδειγμα λειτουργίας συνάρτησης κατακερματισμού} \caption{Παράδειγμα λειτουργίας συνάρτησης κατακερματισμού}
\end{figure} \end{figure}

2
chapters/2.theoretical-background/2.3.merkle-trees.tex

@ -6,7 +6,7 @@
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.3.merkle-tree.png} \includegraphics[width=.85\textwidth]{assets/figures/chapter-2/2.3.merkle-tree.png}
\caption{Παράδειγμα δυαδικού δένδρου Merkle} \caption{Παράδειγμα δυαδικού δένδρου Merkle}
\end{figure} \end{figure}

8
chapters/2.theoretical-background/2.4.p2p-networks.tex

@ -1,6 +1,12 @@
\section{Δίκτυα Ομότιμων Κόμβων} \label{section:2-4-p2p-networks} \section{Δίκτυα Ομότιμων Κόμβων} \label{section:2-4-p2p-networks}
Τα δίκτυα ομότιμων κόμβων ή Peer-to-Peer (P2P) networks αποτελούν μία κατανεμημένη αρχιτεκτονική δικτύων, οι συμμετέχοντες (κόμβοι) της οποίας μοιράζονται ένα τμήμα των πόρων τους, με στόχο την παροχή κάποιας υπηρεσίας (π.χ. τον διαμοιρασμό περιεχομένου). Εν αντιθέσει με συγκεντρωτικά δίκτυα τύπου client/server, οι κόμβοι (nodes) έχουν απευθείας πρόσβαση στους πόρους, χωρίς τη διαμεσολάβηση ενδιάμεσων οντοτήτων. Οι συμμετέχοντες ενός τέτοιου δικτύου είναι, δηλαδή, ταυτόχρονα, τόσο πάροχοι, όσο και αιτούντες των πόρων και της παρεχόμενης υπηρεσίας.\cite{2.4-p2p-networking} Τα δίκτυα ομότιμων κόμβων ή Peer-to-Peer (P2P) networks αποτελούν μία κατανεμημένη αρχιτεκτονική δικτύων, οι συμμετέχοντες (κόμβοι) της οποίας μοιράζονται ένα τμήμα των πόρων τους, με στόχο την παροχή κάποιας υπηρεσίας (π.χ. τον διαμοιρασμό περιεχομένου). Εν αντιθέσει με συγκεντρωτικά δίκτυα τύπου client-server, οι κόμβοι (nodes) έχουν απευθείας πρόσβαση στους πόρους, χωρίς τη διαμεσολάβηση ενδιάμεσων οντοτήτων. Οι συμμετέχοντες ενός τέτοιου δικτύου είναι, δηλαδή, ταυτόχρονα, τόσο πάροχοι, όσο και αιτούντες των πόρων και της παρεχόμενης υπηρεσίας.\cite{2.4-p2p-networking}
\begin{figure}[H]
\centering
\includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.4.p2p-networks}
\caption{Αρχιτεκτονικές δικτύων client-server και P2P}
\end{figure}
Τα P2P networks μπορούν να χωριστούν σε δύο κατηγορίες: Τα P2P networks μπορούν να χωριστούν σε δύο κατηγορίες:

2
chapters/2.theoretical-background/2.5.blockchain.tex

@ -1,6 +1,6 @@
\section{Blockchain} \label{section:2-5-blockchain} \section{Blockchain} \label{section:2-5-blockchain}
Το blockchain αποτελεί μία διανεμημένη δημόσια σειρά δεδομένων, που διατηρεί έναν αμετάβλητο ως προς το ιστορικό του κατάλογο (immutable ledger) ψηφιακών συναλλαγών (digital transactions) ενός αγαθού (asset), π.χ. ενός νομίσματος (currency ή token). Περιγράφηκε για πρώτη φορά το 2008 από ένα άτομο (ή μία ομάδα ανθρώπων) γνωστό ως Satoshi Nakamoto, αποτελώντας τη βάση του κρυπτονομίσματος (cryptocurrency) Bitcoin.\cite{2.5-bitcoin} Το blockchain αποτελεί μία διανεμημένη δημόσια σειρά δεδομένων, που διατηρεί έναν αμετάβλητο ως προς το ιστορικό του κατάλογο (immutable ledger) ψηφιακών συναλλαγών (digital transactions) ενός αγαθού (asset), π.χ. ενός νομίσματος (currency ή token). Περιγράφηκε για πρώτη φορά το 2008 από ένα άτομο (ή μία ομάδα ανθρώπων) με το ψευδώνυμο Satoshi Nakamoto, αποτελώντας τη βάση του κρυπτονομίσματος (cryptocurrency) Bitcoin.\cite{2.5-bitcoin}
Δομικό στοιχείο του blockchain είναι το μπλοκ (block), το οποίο περιέχει μία ομάδα έγκυρων συναλλαγών που έχουν κατακερματιστεί και κωδικοποιηθεί σε ένα δένδρο Merkle, το hash του προηγούμενου μπλοκ και μερικά ακόμα μεταδεδομένα (π.χ. nonce, timestamp). Έτσι, κάθε νέο μπλοκ "δείχνει" στο προηγούμενό του μέσω του hash, επιβεβαιώνοντας την ακεραιότητά του, με τα διαδεχόμενα μπλοκ να σχηματίζουν τελικά μία αλυσίδα, μέχρι το αρχικό μπλοκ, το οποίο είναι γνωστό ως το μπλοκ γένεσης (genesis block).\cite{2.5-blockchain} Δομικό στοιχείο του blockchain είναι το μπλοκ (block), το οποίο περιέχει μία ομάδα έγκυρων συναλλαγών που έχουν κατακερματιστεί και κωδικοποιηθεί σε ένα δένδρο Merkle, το hash του προηγούμενου μπλοκ και μερικά ακόμα μεταδεδομένα (π.χ. nonce, timestamp). Έτσι, κάθε νέο μπλοκ "δείχνει" στο προηγούμενό του μέσω του hash, επιβεβαιώνοντας την ακεραιότητά του, με τα διαδεχόμενα μπλοκ να σχηματίζουν τελικά μία αλυσίδα, μέχρι το αρχικό μπλοκ, το οποίο είναι γνωστό ως το μπλοκ γένεσης (genesis block).\cite{2.5-blockchain}

3
chapters/2.theoretical-background/2.7.ipfs.tex

@ -13,8 +13,9 @@
\begin{enumitemcenteredfigure} \begin{enumitemcenteredfigure}
\includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.7.merkle-dag.png} \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.7.merkle-dag.png}
\caption{Merkle DAG\cite{2.7-merkle-dags-proto-school}} \caption[Παράδειγμα Merkle DAG]{Παράδειγμα Merkle DAG\footnotemark}
\end{enumitemcenteredfigure} \end{enumitemcenteredfigure}
\footnotetext{\url{https://proto.school/merkle-dags/}}
Στο παραπάνω Merkle DAG τα baf...i αποτελούν τα CID των αρχείων και των φακέλων. Το δένδρο δημιουργείται από κάτω προς τα πάνω, υπολογίζοντας κάθε φορά τα κατάλληλα hashes/CIDs. Σε περίπτωση που το περιεχόμενο ενός κόμβου αλλάξει, τότε αλλάζει τόσο το CID του, όσο και τα CIDs όλων των προγόνων του. Στο παραπάνω Merkle DAG τα baf...i αποτελούν τα CID των αρχείων και των φακέλων. Το δένδρο δημιουργείται από κάτω προς τα πάνω, υπολογίζοντας κάθε φορά τα κατάλληλα hashes/CIDs. Σε περίπτωση που το περιεχόμενο ενός κόμβου αλλάξει, τότε αλλάζει τόσο το CID του, όσο και τα CIDs όλων των προγόνων του.
\item \textbf{Ανακάλυψη περιεχομένου μέσω κατανεμημένων πινάκων κατακερματισμού (\textenglish{Distributed Hash Tables ή DHTs})}. Ο DHT είναι ένα κατανεμημένο σύστημα για την αντιστοίχιση κλειδιών σε τιμές. Στο IPFS αποτελεί το θεμελιώδες συστατικό του συστήματος δρομολόγησης περιεχομένου και λειτουργεί ως διασταύρωση μεταξύ καταλόγου και συστήματος πλοήγησης. Πρακτικά πρόκειται για ένα πίνακα που αποθηκεύει ποιος έχει ποια δεδομένα και, μέσω του οποίου, ο χρήστης βρίσκει τον peer που έχει αποθηκευμένο το επιθυμητό περιεχόμενο. \item \textbf{Ανακάλυψη περιεχομένου μέσω κατανεμημένων πινάκων κατακερματισμού (\textenglish{Distributed Hash Tables ή DHTs})}. Ο DHT είναι ένα κατανεμημένο σύστημα για την αντιστοίχιση κλειδιών σε τιμές. Στο IPFS αποτελεί το θεμελιώδες συστατικό του συστήματος δρομολόγησης περιεχομένου και λειτουργεί ως διασταύρωση μεταξύ καταλόγου και συστήματος πλοήγησης. Πρακτικά πρόκειται για ένα πίνακα που αποθηκεύει ποιος έχει ποια δεδομένα και, μέσω του οποίου, ο χρήστης βρίσκει τον peer που έχει αποθηκευμένο το επιθυμητό περιεχόμενο.

2
chapters/3.application-design/3.0.application-design.tex

@ -1,5 +1,7 @@
\chapter{Σχεδίαση εφαρμογής}\label{chapter:3-application-design} \chapter{Σχεδίαση εφαρμογής}\label{chapter:3-application-design}
Σε αυτό το κεφάλαιο περιγράφεται η διαδικασία σχεδίασης της εφαρμογής Concordia, από τη σύλληψη της ιδέας και την επιλογή της τεχνολογικής στοίβας, μέχρι τον ορισμό της αρχιτεκτονικής της και τον διαχωρισμό του προγραμματιστικού έργου σε sprints.
\input{chapters/3.application-design/3.1.idea-conception} \input{chapters/3.application-design/3.1.idea-conception}
\input{chapters/3.application-design/3.2.technology-stack} \input{chapters/3.application-design/3.2.technology-stack}
\input{chapters/3.application-design/3.3.design-methodology} \input{chapters/3.application-design/3.3.design-methodology}

6
chapters/3.application-design/3.1.idea-conception.tex

@ -1,11 +1,9 @@
\section{Σύλληψη της ιδέας} \label{section:3-1-idea-conception} \section{Σύλληψη της ιδέας} \label{section:3-1-idea-conception}
Η σύλληψη της ιδέας για τη δημιουργία της εφαρμογής της παρούσας διπλωματικής εργασίας είχε ως εφαλτήριο την αναγνώριση ενός διδιάστατου προβλήματος. Η σύλληψη της ιδέας για τη δημιουργία της εφαρμογής της παρούσας διπλωματικής εργασίας έχει ως εφαλτήριο την αναγνώριση ενός διδιάστατου προβλήματος.
Η πρώτη διάσταση εστιάζει στον χώρο των μέσων κοινωνικής δικτύωσης. Εκεί παρατηρείται αδιαμφισβήτητη επικράτηση πλατφορμών επικοινωνίας συγκεντρωτικής μορφής (π.χ. Facebook, Twitter, Instagram), ενώ προσπάθειες δημιουργίας αντίστοιχων αποκεντρωτικών εφαρμογών βρίσκονται σε πρώιμα στάδια, τόσο ανάπτυξης, όσο και υιοθέτησης από το ευρύ κοινό. Όπως αναλύθηκε και στην ενότητα \ref{section:1-3-problem-definition}, η τρέχουσα αυτή κατάσταση θέτει αξιοσημείωτα προβλήματα τεχνικής φύσεως (έλλειψη ασφάλειας και διαθεσιμότητας) και, κυρίως, πολιτικής (έλλειψη εμπιστοσύνης, εγγύησης της αυθεντικότητας των δεδομένων και της ελευθερίας του λόγου). Η πρώτη διάσταση εστιάζει στον χώρο των μέσων κοινωνικής δικτύωσης. Εκεί παρατηρείται αδιαμφισβήτητη επικράτηση πλατφορμών επικοινωνίας συγκεντρωτικής μορφής (π.χ. Facebook, Twitter, Instagram), ενώ προσπάθειες δημιουργίας αντίστοιχων αποκεντρωτικών εφαρμογών βρίσκονται σε πρώιμα στάδια, τόσο ανάπτυξης, όσο και υιοθέτησης από το ευρύ κοινό. Όπως αναλύθηκε και στην ενότητα \ref{section:1-3-problem-definition}, η τρέχουσα αυτή κατάσταση θέτει αξιοσημείωτα προβλήματα τεχνικής φύσεως (έλλειψη ασφάλειας και διαθεσιμότητας) και, κυρίως, πολιτικής (έλλειψη εμπιστοσύνης, εγγύησης της αυθεντικότητας των δεδομένων και της ελευθερίας του λόγου).
Η δεύτερη διάσταση εστιάζει στον χώρο της ψηφιακής δημοκρατίας (digital democracy). Συγκεκριμένα, παρατηρείται έλλειψη εργαλείων, ικανών να παρέχουν τη δυνατότητα διενέργειας αυθεντικών δημοκρατικών διαδικασιών. Ψηφοφορίες και αυτοδιαχείριση εντός συστημάτων κεντροποιημένης λογικής αδυνατούν, για αρχιτεκτονικούς λόγους, να εξασφαλίσουν τις απαραίτητες θεμελιώδεις ιδιότητες τέτοιων διαδικασιών, δηλαδή της ανωνυμίας και της επαληθευσιμότητας. Η δεύτερη διάσταση εστιάζει στον χώρο της ψηφιακής δημοκρατίας (digital democracy). Συγκεκριμένα, παρατηρείται έλλειψη εργαλείων, ικανών να παρέχουν τη δυνατότητα διενέργειας αυθεντικών δημοκρατικών διαδικασιών. Ψηφοφορίες και αυτοδιαχείριση εντός συστημάτων κεντροποιημένης λογικής αδυνατούν, για αρχιτεκτονικούς λόγους, να εξασφαλίσουν τις απαραίτητες θεμελιώδεις ιδιότητες τέτοιων διαδικασιών, δηλαδή της ανωνυμίας και της επαληθευσιμότητας.
Βάσει των παραπάνω, γεννήθηκε η ιδέα δημιουργίας μίας εφαρμογής, η οποία, μέσω ενός προτεινόμενου συνδυασμού αποκεντρωτικών τεχνολογιών, να ορίσει έναν ψηφιακό χώρο που θα έρθει αντιμέτωπος με τα παραπάνω. Έτσι, κεντρικός στόχος της πιλοτικής εφαρμογής Concordia, είναι να αποτελέσει μία αυτόνομη κοινωνική πλατφόρμα, που θα κατοχυρώνει στους χρήστες της ελευθερία του λόγου και πλήρη κυριότητα επί των δεδομένων τους. Επιπλέον, θα παρέχει τη δυνατότητα διενέργειας αυθεντικών, ανώνυμων ψηφοφοριών, κάτι που θα την καθιστά ένα αξιόπιστο δημοκρατικό βήμα για τη λήψη αποφάσεων εντός των αυτοδιαχειριζόμενων κοινοτήτων της. Αυτές οι παρατηρήσεις αποτέλεσαν την έμπνευση για τη δημιουργία μίας εφαρμογής, η οποία, μέσω ενός προτεινόμενου συνδυασμού αποκεντρωτικών τεχνολογιών, να ορίσει έναν ψηφιακό χώρο που θα έρθει αντιμέτωπος με το παραπάνω πρόβλημα. Έτσι, κεντρικός στόχος της πιλοτικής εφαρμογής Concordia, είναι να αποτελέσει μία αυτόνομη κοινωνική πλατφόρμα, που θα κατοχυρώνει στους χρήστες της ελευθερία του λόγου και πλήρη κυριότητα επί των δεδομένων τους. Επιπλέον, θα παρέχει τη δυνατότητα διενέργειας αυθεντικών, ανώνυμων ψηφοφοριών, κάτι που θα την καθιστά ένα αξιόπιστο δημοκρατικό βήμα για τη λήψη αποφάσεων εντός των αυτοδιαχειριζόμενων κοινοτήτων της.
\newpage

6
chapters/3.application-design/3.4.user-categories.tex

@ -28,11 +28,11 @@
\begin{center} \begin{center}
\begin{tabularx}{\textwidth}{p{2.3cm} X X X X X X X X X} \begin{tabularx}{\textwidth}{p{2.3cm} X X X X X X X X X}
\toprule \toprule
\multirow{7}{2.3cm}{Κατηγορία χρήστη} &\multicolumn{9}{c}{Δικαιώματα} \\ [0.5ex] \multirow{7}{2.3cm}{\textbf{Κατηγορία χρήστη}} &\multicolumn{9}{c}{\textbf{Δικαιώματα}} \\ [0.5ex]
& \spheading{70}{6em}{Προβολή θεμάτων} & \spheading{70}{8em}{Προβολή μηνυμάτων} & \spheading{70}{8em}{Προβολή ψηφοφοριών} & \spheading{70}{8em}{Προβολή ψήφων μηνυμάτων} & \spheading{70}{8em}{Δημιουργία θεμάτων} & \spheading{70}{8em}{Δημιουργία μηνυμάτων} & \spheading{70}{8em}{Δημιουργία ψηφοφοριών} & \spheading{70}{8em}{Ψήφιση σε ψηφοφορίες} & \spheading{70}{8em}{Ψήφιση μηνυμάτων} \\ [0.5ex] & \spheading{70}{6em}{Προβολή θεμάτων} & \spheading{70}{8em}{Προβολή μηνυμάτων} & \spheading{70}{8em}{Προβολή ψηφοφοριών} & \spheading{70}{8em}{Προβολή ψήφων μηνυμάτων} & \spheading{70}{8em}{Δημιουργία θεμάτων} & \spheading{70}{8em}{Δημιουργία μηνυμάτων} & \spheading{70}{8em}{Δημιουργία ψηφοφοριών} & \spheading{70}{8em}{Ψήφιση σε ψηφοφορίες} & \spheading{70}{8em}{Ψήφιση μηνυμάτων} \\ [0.5ex]
\midrule \midrule
Επισκέπτες & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} \\ [0.5ex] Επισκέπτες & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} \\ [0.5ex]
Εγγεγραμμένα μέλη & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \textcolor{OliveGreen}{\faIcon{check}} \\ [0.5ex] Εγγεγραμμένα μέλη & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \ \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \ \textcolor{OliveGreen}{\faIcon{check}} \\ [0.5ex]
\bottomrule \bottomrule
\end{tabularx} \end{tabularx}
\begin{tablenotes} \begin{tablenotes}

20
chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex

@ -19,15 +19,15 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί εγγραφή. & Το σύστημα εμφανίζει την φόρμα ``Εγγραφή Χρήστη''. \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί εγγραφή. & Το σύστημα εμφανίζει την φόρμα "Εγγραφή Χρήστη". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο χρήστη στο blockchain. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέο χρήστη στο blockchain. \\ [0.5ex]
\midrule \midrule
3 & - & Το σύστημα δημιουργεί τις προσωπικές βάσεις βάσεις δεδομένων OrbitDb του χρήστη. \\ [0.5ex] 3 & - & Το σύστημα δημιουργεί τις προσωπικές βάσεις βάσεις δεδομένων OrbitDb του χρήστη. \\ [0.5ex]
\midrule \midrule
4 & - & Το σύστημα εμφανίζει την φόρμα ``Πληροφορίες Χρήστη''. \\ [0.5ex] 4 & - & Το σύστημα εμφανίζει την φόρμα "Πληροφορίες Χρήστη". \\ [0.5ex]
\midrule \midrule
5 & Ο χρήστης συμπληρώνει τις προσωπικές του πληροφορίες και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει τις πληροφορίες χρήστη στην προσωπική του βάση OrbitDb. \\ [0.5ex] 5 & Ο χρήστης συμπληρώνει τις προσωπικές του πληροφορίες και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει τις πληροφορίες χρήστη στην προσωπική του βάση OrbitDb. \\ [0.5ex]
} }
{Το σύστημα μεταβαίνει στην αρχική σελίδα της εφαρμογής.} {Το σύστημα μεταβαίνει στην αρχική σελίδα της εφαρμογής.}
{Σενάριο χρήσης 1 - Βασική ροή} {Σενάριο χρήσης 1 - Βασική ροή}
@ -57,10 +57,10 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{2} {2}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} {Ο χρήστης πατάει το κουμπί "Άκυρο".}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} {Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Άκυρο" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{ {
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
} }
{Το σενάριο χρήσης τερματίζεται.} {Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 2} {Σενάριο χρήσης 1 - Εναλλακτική ροή 2}
@ -68,10 +68,10 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{3} {3}
{Ο χρήστης πατάει το κουμπί ``Παράληψη''.} {Ο χρήστης πατάει το κουμπί "Παράληψη".}
{Εφόσον ο χρήστης στη γραμμή 5 της Βασικής Ροής επιλέξει ``Παράληψη'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} {Εφόσον ο χρήστης στη γραμμή 5 της Βασικής Ροής επιλέξει "Παράληψη" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{ {
1 & Ο χρήστης πατάει το κουμπί ``Παράληψη'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. 1 & Ο χρήστης πατάει το κουμπί "Παράληψη" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
} }
{Το σενάριο χρήσης τερματίζεται.} {Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 3} {Σενάριο χρήσης 1 - Εναλλακτική ροή 3}

16
chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex

@ -19,9 +19,9 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Κοινότητας''. \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει την φόρμα "Δημιουργία Κοινότητας". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex]
} }
{Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} {Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.}
{Σενάριο χρήσης 10 - Βασική ροή} {Σενάριο χρήσης 10 - Βασική ροή}
@ -41,11 +41,11 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{1} {1}
{Ο χρήστης ορίζει εξωτερικό contract για την κοινότητα.} {Ο χρήστης ορίζει εξωτερικό contract για την κοινότητα.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Συμβολαίου'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Σύνδεση Συμβολαίου''.} {Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Προσθήκη Συμβολαίου" το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας "Σύνδεση Συμβολαίου".}
{ {
1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Κοινότητας'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Σύνδεση Συμβολαίου''. \\ [0.5ex] 1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα "Δημιουργία Κοινότητας", πατάει το κουμπί "Προσθήκη ψηφοφορίας" & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας "Σύνδεση Συμβολαίου". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί την νέα κοινότητα στο blockchain και την συνδέει με το εξωτερικό contract. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα δημιουργεί την νέα κοινότητα στο blockchain και την συνδέει με το εξωτερικό contract. \\ [0.5ex]
} }
{Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} {Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.}
{Σενάριο χρήσης 10 - Εναλλακτική ροή 1} {Σενάριο χρήσης 10 - Εναλλακτική ροή 1}
@ -60,10 +60,10 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{2} {2}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} {Ο χρήστης πατάει το κουμπί "Άκυρο".}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} {Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει "Άκυρο" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{ {
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
} }
{Το σενάριο χρήσης τερματίζεται.} {Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 10 - Εναλλακτική ροή 2} {Σενάριο χρήσης 10 - Εναλλακτική ροή 2}

16
chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex

@ -19,9 +19,9 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Θέματος''. \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος. & Το σύστημα εμφανίζει την φόρμα "Δημιουργία Θέματος". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο θέμα στο blockchain. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέο θέμα στο blockchain. \\ [0.5ex]
\midrule \midrule
3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] 3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
} }
@ -43,11 +43,11 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{1} {1}
{Ο χρήστης δημιουργεί ψηφοφορία.} {Ο χρήστης δημιουργεί ψηφοφορία.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Ψηφοφορίας'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''.} {Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Προσθήκη Ψηφοφορίας" το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας "Δημιουργία Ψηφοφορίας".}
{ {
1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Θέματος'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''. \\ [0.5ex] 1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα "Δημιουργία Θέματος", πατάει το κουμπί "Προσθήκη ψηφοφορίας" & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας "Δημιουργία Ψηφοφορίας". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει το νέο θέμα καθώς και τη νέα ψηφοφορία στο blockchain. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει το νέο θέμα καθώς και τη νέα ψηφοφορία στο blockchain. \\ [0.5ex]
\midrule \midrule
3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος και της ψηφοφορίας στις προσωπικές βάσεις OrbitDb του χρήστη. 3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος και της ψηφοφορίας στις προσωπικές βάσεις OrbitDb του χρήστη.
} }
@ -64,10 +64,10 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{2} {2}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} {Ο χρήστης πατάει το κουμπί "Άκυρο".}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} {Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει "Άκυρο" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{ {
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
} }
{Το σενάριο χρήσης τερματίζεται.} {Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 3 - Εναλλακτική ροή 2} {Σενάριο χρήσης 3 - Εναλλακτική ροή 2}

10
chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex

@ -19,9 +19,9 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Μηνύματος''. \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος. & Το σύστημα εμφανίζει την φόρμα "Δημιουργία Μηνύματος". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο μήνυμα στο blockchain. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέο μήνυμα στο blockchain. \\ [0.5ex]
\midrule \midrule
3 & - & Το σύστημα εισάγει τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] 3 & - & Το σύστημα εισάγει τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
} }
@ -42,10 +42,10 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{1} {1}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} {Ο χρήστης πατάει το κουμπί "Άκυρο".}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στη σελίδα του θέματος.} {Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Άκυρο" το σύστημα επιστρέφει στη σελίδα του θέματος.}
{ {
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στη σελίδα του θέματος. 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στη σελίδα του θέματος.
} }
{Το σενάριο χρήσης τερματίζεται.} {Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 5 - Εναλλακτική ροή 1} {Σενάριο χρήσης 5 - Εναλλακτική ροή 1}

10
chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex

@ -19,9 +19,9 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος. & Το σύστημα εμφανίζει την φόρμα ``Τροποποίηση Μηνύματος''. \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος. & Το σύστημα εμφανίζει την φόρμα "Τροποποίηση Μηνύματος". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα τροποποιεί τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα τροποποιεί τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
} }
{Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το τροποποιημένο μήνυμα.} {Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το τροποποιημένο μήνυμα.}
{Σενάριο χρήσης 6 - Βασική ροή} {Σενάριο χρήσης 6 - Βασική ροή}
@ -40,10 +40,10 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{1} {1}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} {Ο χρήστης πατάει το κουμπί "Άκυρο".}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στη σελίδα του θέματος.} {Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Άκυρο" το σύστημα επιστρέφει στη σελίδα του θέματος.}
{ {
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στη σελίδα του θέματος. 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στη σελίδα του θέματος.
} }
{Το σενάριο χρήσης τερματίζεται.} {Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 6 - Εναλλακτική ροή 1} {Σενάριο χρήσης 6 - Εναλλακτική ροή 1}

2
chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex

@ -19,7 +19,7 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί της επιλογής που επιθυμεί να ψηφίσει και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέα ψήφο στο blockchain. \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί της επιλογής που επιθυμεί να ψηφίσει και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέα ψήφο στο blockchain. \\ [0.5ex]
} }
{Το σύστημα ανανεώνει τις πληροφορίες της ψηφοφορίας.} {Το σύστημα ανανεώνει τις πληροφορίες της ψηφοφορίας.}
{Σενάριο χρήσης 7 - Βασική ροή} {Σενάριο χρήσης 7 - Βασική ροή}

4
chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex

@ -19,9 +19,9 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων. & Το σύστημα εμφανίζει την φόρμα ``Επιβεβαίωση Διαγραφής Τοπικών Δεδομένων''. \\ [0.5ex] 1 & Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων. & Το σύστημα εμφανίζει την φόρμα "Επιβεβαίωση Διαγραφής Τοπικών Δεδομένων". \\ [0.5ex]
\midrule \midrule
2 & Ο επισκέπτης συμπληρώνει το πεδίο και πατάει το κουμπί ``Υποβολή''. & Το σύστημα διαγράφει όλες τις τοπικές βάσεις OrbitDb που χρησιμοποιούνται από την εφαρμογή. \\ [0.5ex] 2 & Ο επισκέπτης συμπληρώνει το πεδίο και πατάει το κουμπί "Υποβολή". & Το σύστημα διαγράφει όλες τις τοπικές βάσεις OrbitDb που χρησιμοποιούνται από την εφαρμογή. \\ [0.5ex]
} }
{Το σύστημα παραμένει πραγματοποιεί ανανέωση της σελίδας.} {Το σύστημα παραμένει πραγματοποιεί ανανέωση της σελίδας.}
{Σενάριο χρήσης 9 - Βασική ροή} {Σενάριο χρήσης 9 - Βασική ροή}

2
chapters/3.application-design/3.7.architecture-design.tex

@ -6,7 +6,7 @@
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=.75\textwidth]{assets/figures/chapter-3/3.7.architecture-design} \includegraphics[width=\textwidth]{assets/figures/chapter-3/3.7.architecture-design}
\caption{Αρχιτεκτονική του συστήματος (στάδιο σχεδίασης)} \caption{Αρχιτεκτονική του συστήματος (στάδιο σχεδίασης)}
\end{figure} \end{figure}

8
chapters/3.application-design/3.8.implementation-methodology-specification.tex

@ -1,4 +1,8 @@
\section{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός} \label{section:3-8-implementation-methodology-specification} \section[Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός]{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός%
\sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός}}
\sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός}
\label{section:3-8-implementation-methodology-specification}
Κατά τον χρονοπρογραμματισμό ακολουθήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους, διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Τα Sprints αποτελούνται από επιμέρους διαχωρισμό της εργασίας σε epic tasks. Σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των επιμέρους tasks, κάθε epic χωρίστηκε σε tasks κατά το αρχικό στάδιο της υλοποίησης του. Κατά τον χρονοπρογραμματισμό ακολουθήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους, διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Τα Sprints αποτελούνται από επιμέρους διαχωρισμό της εργασίας σε epic tasks. Σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των επιμέρους tasks, κάθε epic χωρίστηκε σε tasks κατά το αρχικό στάδιο της υλοποίησης του.
@ -16,5 +20,3 @@
\caption{Διαχωρισμός σε sprints} \caption{Διαχωρισμός σε sprints}
\label{figure:3.8.implementation-methodology-specification-sprints} \label{figure:3.8.implementation-methodology-specification-sprints}
\end{figure} \end{figure}
%TODO: add tasks for serve (front and contracts) thru IPFS, upgradability

8
chapters/4.application-implementation/4.3.implementation-architecture/4.3.9.data-flow.tex

@ -8,20 +8,20 @@
Τέλος, παρακάτω δίνεται ένα παράδειγμα εισαγωγής πληροφορίας στο σύστημα και έπειτα ανάκτησης της ίδιας πληροφορίας. Τέλος, παρακάτω δίνεται ένα παράδειγμα εισαγωγής πληροφορίας στο σύστημα και έπειτα ανάκτησης της ίδιας πληροφορίας.
Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του/της δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο τη διεύθυνση του/της δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του/της χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. Στο σχήμα \ref{figure:4-3-data-flow-insert} παρουσιάζεται γραφικά η διαδικασία. Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο τη διεύθυνση του δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. Στο σχήμα \ref{figure:4-3-data-flow-insert} παρουσιάζεται γραφικά η διαδικασία.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png} \input{tikz/chapter-3/3-6-use-case-create-topic-sequence-diagram}
\caption{Διάγραμμα ακολουθίας δημιουργίας θέματος} \caption{Διάγραμμα ακολουθίας δημιουργίας θέματος}
\label{figure:4-3-data-flow-insert} \label{figure:4-3-data-flow-insert}
\end{figure} \end{figure}
Έστω, χρήστης που επιθυμεί να διαβάσει το προηγούμενο μήνυμα. Αρχικά, πρέπει να διαβαστεί ο πίνακας θεμάτων από το blockchain. Η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του κάθε θέματος, τα οποία ανακτώνται από τις προσωπικές βάσεις Orbit κάθε χρήστη. Έπειτα, εφόσον το θέμα βρεθεί και ο αύξων αριθμός του είναι γνωστός, πρέπει να διαβαστούν από το blockchain τα μεταδομένα των μηνυμάτων του θέματος και συγκεκριμένα η διευθύνσεις των δημιουργών τους. Τέλος, μέσω του IPFS πρέπει να γίνει αντιγραφή των προσωπικών βάσεων των δημιουργών του κάθε μηνύματος και να αναζητηθούν σε αυτές τα εκάστοτε μηνύματα. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα. Έστω, χρήστης που επιθυμεί να διαβάσει το προηγούμενο θέμα. Αρχικά, πρέπει να διαβαστούν τα μεταδεδομένα του συγκεκριμένου θέματος από το blockchain. Έπειτα, διαβάζονται από το blockchain οι αύξοντες αριθμοί των μηνυμάτων που έχουν δημοσιευτεί στο θέμα αυτό. Σε μία τελευταία ανάκτηση από το blockchain διαβάζονται τα μεταδομένα του κάθε μηνύματος. Έπειτα, η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του θέματος και των μηνυμάτων, τα οποία ανακτώνται από τις προσωπικές βάσεις Orbit κάθε χρήστη. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png} \input{tikz/chapter-3/3-6-use-case-fetch-topic-sequence-diagram}
\caption{Διάγραμμα ακολουθίας εύρεσης και ανάκτησης θέματος} \caption{Διάγραμμα ακολουθίας εύρεσης και ανάκτησης θέματος}
\label{figure:4-3-data-flow-read} \label{figure:4-3-data-flow-read}
\end{figure} \end{figure}

2
chapters/4.application-implementation/4.5.implemented-parts.tex

@ -16,7 +16,7 @@
\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\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApps και υπερβάλλον για τα πλαίσια ενός PoC. Στο παράρτημα \ref{screenshots-appendix} παρατίθενται τα στιγμιότυπα οθόνης των υλοποιημένων χαρακτηριστικών. Τα παραπάνω αντιστοιχούν σε 11 ολοκληρωμένες από τις 13 προδιαγεγραμμένες ΛΑ ή πλήρωση 84.6\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApps και υπερβάλλον για τα πλαίσια ενός PoC. Στο παράρτημα \ref{appendix-a} παρατίθενται τα στιγμιότυπα οθόνης των υλοποιημένων χαρακτηριστικών.
Το χαρακτηριστικό το οποία παραλήφθηκε είναι η δημιουργία κοινοτήτων και ο ορισμός εξωτερικών contracts για τα tokens τους, όπως περιγράφονται στις \ref{srs:functional-srs-create-communities} \& \ref{srs:functional-srs-assign-community-contract} και στο σενάριο χρήσης \ref{subsection:3-10-use-case-create-community}. Το χαρακτηριστικό το οποία παραλήφθηκε είναι η δημιουργία κοινοτήτων και ο ορισμός εξωτερικών contracts για τα tokens τους, όπως περιγράφονται στις \ref{srs:functional-srs-create-communities} \& \ref{srs:functional-srs-assign-community-contract} και στο σενάριο χρήσης \ref{subsection:3-10-use-case-create-community}.

6
chapters/5.conclusions-open-areas/5.1.conclusions.tex

@ -1,8 +1,8 @@
\section{Συμπεράσματα}\label{section:5-1-conclusions} \section{Συμπεράσματα}\label{section:5-1-conclusions}
Συνοψίζοντας, μέσω της ανάπτυξης της πιλοτικής εφαρμογής Concordia γίνεται φανερό ότι είναι εφικτή η υλοποίηση μίας πλήρως αποκεντρωμένης κοινωνικής πλατφόρμας, η οποία να εκπληρώνει τον στόχο που τέθηκε στην \hyperref[section:1-4-thesis-goal]{ενότητα 1.4}, σύμφωνα με τον σχεδιασμό του \hyperref[chapter:3-application-design]{κεφαλαίου 3}. Συνοψίζοντας, μέσω της ανάπτυξης της πιλοτικής εφαρμογής Concordia γίνεται φανερό ότι είναι εφικτή η υλοποίηση μίας πλήρως αποκεντρωμένης κοινωνικής πλατφόρμας, η οποία να εκπληρώνει τον στόχο που τέθηκε στην \hyperref[section:1-4-thesis-goal]{ενότητα 1.4}, σύμφωνα πάντα με τον σχεδιασμό του \hyperref[chapter:3-application-design]{κεφαλαίου 3}.
Μέσω της αρχιτεκτονικής αποκέντρωσης των τριών επιπέδων της τεχνολογικής στοίβας (βλ. \hyperref[section:3-2-technology-stack]{ενότητα 3.2}), δημιουργείται ένα πολιτικά αποκεντρωμένος ψηφιακός χώρος, ο οποίος κατοχυρώνει την ελευθερία του λόγου των συμμετεχόντων και παρέχει παντοδύναμες αυθεντικές δημοκρατικές διαδικασίες. Μέσω της αρχιτεκτονικής αποκέντρωσης των τριών επιπέδων της τεχνολογικής στοίβας (βλ. \hyperref[section:3-2-technology-stack]{ενότητα 3.2}), δημιουργείται ένας πολιτικά αποκεντρωμένος ψηφιακός χώρος, ο οποίος κατοχυρώνει την ελευθερία του λόγου των συμμετεχόντων και παρέχει παντοδύναμες αυθεντικές δημοκρατικές διαδικασίες.
Ωστόσο, θα πρέπει να επισημανθεί ότι η εφαρμογή χαρακτηρίζεται από ορισμένα μειονεκτήματα, τα οποία σχετίζονται, κυρίως, με την πρώιμη κατάσταση ανάπτυξης των επιλεγμένων τεχνολογιών: Ωστόσο, θα πρέπει να επισημανθεί ότι η εφαρμογή χαρακτηρίζεται από ορισμένα μειονεκτήματα, τα οποία σχετίζονται, κυρίως, με την πρώιμη κατάσταση ανάπτυξης των επιλεγμένων τεχνολογιών:
@ -17,4 +17,4 @@
\item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, τα οποία σχετίζονται κυρίως με την εύρεση των peers (το οποίο βασίζεται προσωρινά σε signalling servers\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}) και το replication των δεδομένων. \item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, τα οποία σχετίζονται κυρίως με την εύρεση των peers (το οποίο βασίζεται προσωρινά σε signalling servers\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}) και το replication των δεδομένων.
\end{itemize} \end{itemize}
Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση. Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση της τεχνολογικής στοίβας.

2
chapters/appendix/screenshots-appendix.tex → chapters/appendix/appendix-a.tex

@ -1,4 +1,4 @@
\chapter*{Παράρτημα Αʹ\\[20pt]Στιγμιότυπα οθόνης πλατφόρμας}\label{screenshots-appendix} \chapter*{Παράρτημα Αʹ\\[20pt]Στιγμιότυπα οθόνης πλατφόρμας}\label{appendix-a}
\addcontentsline{toc}{section}{Αʹ Στιγμιότυπα οθόνης πλατφόρμας} \addcontentsline{toc}{section}{Αʹ Στιγμιότυπα οθόνης πλατφόρμας}
% TODO: add screenshots of application % TODO: add screenshots of application

56
chapters/appendix/appendix-b.tex

@ -0,0 +1,56 @@
\chapter*{Παράρτημα Βʹ\\[20pt]Στατιστικά κώδικα}\label{appendix-b}
\addcontentsline{toc}{section}{Βʹ Στατιστικά κώδικα}
\captionsetup{labelformat=AppendixBTables}
\setcounter{table}{0}
Στο παρόν παράρτημα παρατίθενται πίνακες με στατιστικά στοιχεία του κώδικα της εφαρμογής Concordia, καθώς και των υλοποιημένων βιβλιοθηκών. Συγκεκριμένα, πραγματοποιήθηκε καταμέτρηση των αρχείων και των γραμμών κώδικα μέσω του προγραμμάτος cloc\footnote{\url{https://github.com/AlDanial/cloc}}, διαδικασία στην οποία αγνοήθηκαν αυτόματα configuration και auto-generated αρχεία (π.χ. yarn.lock, .gitignore).
\begin{center}
\codestatstable{Concordia}{https://gitlab.com/ecentrics/concordia}
{
JSX & 54 & 510 & 14 & 4491 \\
JavaScript & 81 & 302 & 84 & 2035 \\
Groovy & 1 & 76 & 32 & 673 \\
Solidity & 5 & 142 & 20 & 553 \\
CSS & 26 & 87 & 8 & 426 \\
JSON & 10 & 0 & 0 & 352 \\
Markdown & 7 & 157 & 0 & 352 \\
Dockerfile & 5 & 68 & 51 & 128 \\
Bourne Shell & 9 & 27 & 10 & 117 \\
make & 1 & 10 & 8 & 77 \\
YAML & 1 & 3 & 0 & 30 \\
SVG & 6 & 0 & 0 & 25 \\
HTML & 1 & 3 & 23 & 16 \\
diff & 1 & 0 & 8 & 7 \\
\hline
\textbf{Σύνολο} & 208 & 1385 & 258 & 9282 \\
}
\codestatstable{drizzle}{https://gitlab.com/ecentrics/drizzle}
{
JavaScript & 36 & 281 & 137 & 1448 \\
JSON & 1 & 0 & 0 & 16 \\
Markdown & 1 & 2 & 0 & 4 \\
\hline
\textbf{Σύνολο} & 38 & 283 & 137 & 1468 \\
}
\codestatstable{breeze}{https://gitlab.com/ecentrics/breeze}
{
JavaScript & 16 & 105 & 56 & 583 \\
JSON & 1 & 0 & 0 & 17 \\
Markdown & 1 & 2 & 0 & 4 \\
\hline
\textbf{Σύνολο} & 18 & 107 & 56 & 604 \\
}
\codestatstable{eth-identity-provider}{https://gitlab.com/ecentrics/eth-identity-provider}
{
JavaScript & 4 & 36 & 23 & 211 \\
JSON & 1 & 0 & 0 & 13 \\
Markdown & 1 & 2 & 0 & 4 \\
\hline
\textbf{Σύνολο} & 6 & 38 & 23 & 228 \\
}
\end{center}

3
chapters/appendix/appendix.tex

@ -1 +1,2 @@
\input{chapters/appendix/screenshots-appendix} \input{chapters/appendix/appendix-a}
\input{chapters/appendix/appendix-b}

19
custom-commands/appendix-code-stats.tex

@ -0,0 +1,19 @@
\newcommand{\codestatstable}[3]{
\begin{table}[H]
\centering
\rowcolors{3}{}{gray2}
\begin{tabular}{ |l|r|r|r|r| }
\hline
\rowcolor{gray1}
\multicolumn{5}{|c|}{\large{\textbf{#1}}} \\
\rowcolor{gray1}
\multicolumn{5}{|c|}{\small{\url{#2}}} \\
\hline
\textbf{Γλώσσα} & \textbf{Αρχεία} & \textbf{Κενές γραμμές} & \textbf{Σχόλια} & \textbf{Κώδικας} \\
\hline
#3
\hline
\end{tabular}
\caption{#1 - στατιστικά κώδικα}
\end{table}
}

18
misc/packages.tex

@ -4,7 +4,7 @@
\usepackage[subpreambles=true]{standalone} \usepackage[subpreambles=true]{standalone}
% Paper size and margins % Paper size and margins
\usepackage{geometry} \usepackage[a4paper, top=2.5cm, bottom=2.5cm, left=2.2cm, right=2.2cm]{geometry}
% --- Languages & Fonts --- % --- Languages & Fonts ---
\usepackage{polyglossia} \usepackage{polyglossia}
@ -19,10 +19,13 @@
\usepackage{custom-packages/greek-enumerate} % Greek enumeration for ordered item lists \usepackage{custom-packages/greek-enumerate} % Greek enumeration for ordered item lists
\usepackage{float} % For \begin{figure}[H] \usepackage{float} % For \begin{figure}[H]
\usepackage[font={footnotesize, it}]{caption} % For captions under figures \usepackage[font={footnotesize, it}]{caption} % For captions under figures
\DeclareCaptionLabelFormat{AppendixBTables}{Πίνακας B.#2}
\usepackage{tabularx} % Support for break lines inside table cells \usepackage{tabularx} % Support for break lines inside table cells
\usepackage{multirow, booktabs} % Useful table styling commands \usepackage{multirow, booktabs} % Useful table styling commands
\usepackage[flushleft]{threeparttable} % Table footnotes \usepackage[flushleft]{threeparttable} % Table footnotes
\usepackage[dvipsnames]{xcolor} % Text colors \usepackage[dvipsnames, table]{xcolor} % Text colors
\definecolor{gray1}{gray}{0.85}
\definecolor{gray2}{gray}{0.9}
\usepackage{minted} % Source code highlighting (make sure to add -shell-escape flag!) \usepackage{minted} % Source code highlighting (make sure to add -shell-escape flag!)
\usepackage [autostyle]{csquotes} \usepackage [autostyle]{csquotes}
\usepackage{tcolorbox} % Colored boxes \usepackage{tcolorbox} % Colored boxes
@ -31,7 +34,15 @@
\usepackage{appendix} % Appendix helpers \usepackage{appendix} % Appendix helpers
\usepackage[onehalfspacing]{setspace} \usepackage[onehalfspacing]{setspace}
% --- TikZ and UML diagrams % --- fancyhdr ---
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead[L]{\nouppercase{\rightmark}}
\fancyhead[R]{\nouppercase{\leftmark}}
\setlength{\headheight}{15pt}
% --- TikZ and UML diagrams ---
\usepackage{pgf-umlsd} \usepackage{pgf-umlsd}
% --- Bibliography --- % --- Bibliography ---
@ -47,6 +58,7 @@
\input{custom-commands/use-case-commands} \input{custom-commands/use-case-commands}
\input{custom-commands/custom-spheading} \input{custom-commands/custom-spheading}
\input{custom-commands/appendix-overrides} \input{custom-commands/appendix-overrides}
\input{custom-commands/appendix-code-stats}
% --- Custom styles --- % --- Custom styles ---
\renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines \renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines

BIN
thesis.pdf

Binary file not shown.

3
thesis.tex

@ -6,9 +6,6 @@
% Sets up the bib files % Sets up the bib files
\input{bibliography/bib-setup} \input{bibliography/bib-setup}
% Paper size and margins
\geometry{a4paper, top=2.5cm, bottom=2.5cm, left=2.2cm, right=2.2cm}
% Make title page % Make title page
\input{misc/title-page} \input{misc/title-page}

Loading…
Cancel
Save