Browse Source

fix: service pack 1 (ch. 0-3)

develop
Ezerous 3 years ago
parent
commit
86598355b1
  1. 4
      chapters/0.preamble/0.3.acknowledgements.tex
  2. 4
      chapters/1.introduction/1.1.general.tex
  3. 8
      chapters/1.introduction/1.2.decentralization.tex
  4. 4
      chapters/1.introduction/1.3.problem-definition.tex
  5. 2
      chapters/1.introduction/1.4.thesis-goal.tex
  6. 2
      chapters/1.introduction/1.5.methodology.tex
  7. 12
      chapters/2.theoretical-background/2.2.asymmetric-cryptography.tex
  8. 6
      chapters/2.theoretical-background/2.3.merkle-trees.tex
  9. 24
      chapters/2.theoretical-background/2.6.ethereum.tex
  10. 6
      chapters/3.application-design/3.1.idea-conception.tex
  11. 5
      chapters/3.application-design/3.2.technology-stack.tex
  12. 14
      chapters/3.application-design/3.3.design-methodology.tex
  13. 12
      chapters/3.application-design/3.4.user-categories.tex
  14. 40
      chapters/3.application-design/3.5.software-requirements.tex
  15. 4
      chapters/3.application-design/3.6.use-cases.tex
  16. 16
      chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex
  17. 15
      chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex
  18. 7
      chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in.tex
  19. 16
      chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex
  20. 15
      chapters/3.application-design/3.6.use-cases/3.6.4.use-case-fetch-topic.tex
  21. 9
      chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex
  22. 8
      chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex
  23. 5
      chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex
  24. 4
      chapters/3.application-design/3.6.use-cases/3.6.8.use-case-vote-post.tex
  25. 9
      chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex
  26. 9
      chapters/3.application-design/3.7.architecture-design.tex
  27. 21
      chapters/3.application-design/3.8.implementation-methodology-specification.tex
  28. 5
      custom-commands/use-case-commands.tex
  29. BIN
      thesis.pdf
  30. 2
      tikz/chapter-3/3-6-use-case-create-community-alternate-flow-1-sequence-diagram.tex
  31. 2
      tikz/chapter-3/3-6-use-case-create-community-sequence-diagram.tex
  32. 2
      tikz/chapter-3/3-6-use-case-create-post-sequence-diagram.tex
  33. 2
      tikz/chapter-3/3-6-use-case-create-topic-alternate-flow-1-sequence-diagram.tex
  34. 2
      tikz/chapter-3/3-6-use-case-create-topic-sequence-diagram.tex
  35. 2
      tikz/chapter-3/3-6-use-case-delete-local-data-sequence-diagram.tex
  36. 2
      tikz/chapter-3/3-6-use-case-fetch-topic-alternate-flow-1-sequence-diagram.tex
  37. 2
      tikz/chapter-3/3-6-use-case-fetch-topic-sequence-diagram.tex
  38. 2
      tikz/chapter-3/3-6-use-case-modify-post-sequence-diagram.tex
  39. 2
      tikz/chapter-3/3-6-use-case-sign-in-sequence-diagram.tex
  40. 2
      tikz/chapter-3/3-6-use-case-sign-up-sequence-diagram.tex

4
chapters/0.preamble/0.3.acknowledgements.tex

@ -5,7 +5,7 @@
\begin{itemize} \begin{itemize}
\item Τον επιβλέποντα καθηγητή μας, κ. Δημάκη Χρήστο, για την ευκαιρία που μας έδωσε να ασχοληθούμε με το συγκεκριμένο θέμα και την εμπιστοσύνη που μας έδειξε από την αρχή μέχρι το τέλος. \item Τον επιβλέποντα καθηγητή μας, κ. Δημάκη Χρήστο, για την ευκαιρία που μας έδωσε να ασχοληθούμε με το συγκεκριμένο θέμα και την εμπιστοσύνη που μας έδειξε από την αρχή μέχρι το τέλος.
\item Τη Νικολαΐδου Μελίνα, για τη σχεδίαση του λογότυπου της εφαρμογής και τη δημιουργία σημαντικού τμήματος των σχημάτων του παρόντος εγγράφου. \item Τη Νικολαΐδου Μελίνα, για τη σχεδίαση του λογότυπου της εφαρμογής και τη δημιουργία της πλειοψηφίας των σχημάτων του εγγράφου.
\item Τις οικογένειες και τους φίλους μας, για την αμέριστη υλική και ηθική υποστήριξη που μας προσέφεραν καθ' όλη τη διάρκεια των σπουδών μας. \item Τις οικογένειες και τους φίλους μας, για την αμέριστη ηθική και υλική υποστήριξη που μας προσέφεραν καθ' όλη τη διάρκεια των σπουδών μας.
\item Ο ένας τον άλλον, για την άρτια επικοινωνία και συνεργασία, καθώς και για την υπομονή και την επιμονή, χαρακτηριστικά καθοριστικής σημασίας για την επιτυχή πορεία της διπλωματικής. \item Ο ένας τον άλλον, για την άρτια επικοινωνία και συνεργασία, καθώς και για την υπομονή και την επιμονή, χαρακτηριστικά καθοριστικής σημασίας για την επιτυχή πορεία της διπλωματικής.
\end{itemize} \end{itemize}

4
chapters/1.introduction/1.1.general.tex

@ -2,11 +2,11 @@
Η αλματώδης ανάπτυξη του διαδικτύου διαμόρφωσε ένα ολοκαίνουργιο τοπίο σε κάθε τομέα της ανθρώπινης δραστηριότητας, παρέχοντας ένα αναρίθμητο πλήθος εφαρμογών και υπηρεσιών. Τα μέσα κοινωνικής δικτύωσης, Η αλματώδης ανάπτυξη του διαδικτύου διαμόρφωσε ένα ολοκαίνουργιο τοπίο σε κάθε τομέα της ανθρώπινης δραστηριότητας, παρέχοντας ένα αναρίθμητο πλήθος εφαρμογών και υπηρεσιών. Τα μέσα κοινωνικής δικτύωσης,
το ηλεκτρονικό ταχυδρομείο, η ψηφιακή ειδησεογραφία, ο διαμοιρασμός αρχείων και το ηλεκτρονικό ταχυδρομείο, η ψηφιακή ειδησεογραφία, ο διαμοιρασμός αρχείων και
οι υπηρεσίες πολυμέσων ροής, αποτελούν ορισμένα από τα σημαντικότερα - και πλέον αναπόσπαστα - κομμάτια, οι υπηρεσίες πολυμέσων ροής, αποτελούν μονάχα ορισμένα από τα σημαντικότερα - και πλέον αναπόσπαστα - κομμάτια,
που συνθέτουν την ψηφιακή πτυχή της σύγχρονης καθημερινότητας. που συνθέτουν την ψηφιακή πτυχή της σύγχρονης καθημερινότητας.
Κατά κύριο λόγο, το μοντέλο που ακολουθούν οι παραπάνω τεχνολογίες είναι αυτό της αρχιτεκτονικής πελάτη-εξυπηρετητή (client–server architecture) και προσφέρονται από παρόχους υπηρεσιών υπολογιστικού νέφους (cloud computing service providers). Αυτό σημαίνει ότι οι απαραίτητες λειτουργίες τους, δηλαδή η επεξεργασία (processing), η αποθήκευση των δεδομένων (storage) και το πρωτόκολλο επικοινωνίας (communication protocol) υλοποιούνται επί ενός συγκεντρωτικού (centralized) πλαισίου, κάτι που τους προσδίδει ορισμένα αξιοσημείωτα πλεονεκτήματα (π.χ. ευκολία ανάπτυξης, συντήρησης και αποσφαλμάτωσης). Κατά κύριο λόγο, το μοντέλο που ακολουθούν οι παραπάνω τεχνολογίες είναι αυτό της αρχιτεκτονικής πελάτη-εξυπηρετητή (client–server architecture) και προσφέρονται από παρόχους υπηρεσιών υπολογιστικού νέφους (cloud computing service providers). Αυτό σημαίνει ότι οι απαραίτητες λειτουργίες τους, δηλαδή η επεξεργασία (processing), η αποθήκευση των δεδομένων (storage) και το πρωτόκολλο επικοινωνίας (communication protocol) υλοποιούνται επί ενός συγκεντρωτικού (centralized) πλαισίου, κάτι που τους προσδίδει ορισμένα αξιοσημείωτα πλεονεκτήματα (π.χ. ευκολία ανάπτυξης, συντήρησης και αποσφαλμάτωσης).
Στις μέρες μας, ωστόσο, παρατηρείται παράλληλα μία τάση δημιουργίας εφαρμογών που ακολουθούν αποκεντρωτικά μοντέλα λειτουργίας, στα οποία το processing και το storage κατανέμονται σε ένα σύνολο κόμβων που επικοινωνούν ομότιμα. Εντός, λοιπόν, αυτής της τάσης, αναπτύσσονται με ταχείς ρυθμούς διάφορα λογισμικά, τα οποία συνθέτουν ένα νέο, αποκεντρωτικό οικοσύστημα. Αυτό περιλαμβάνει (μεταξύ άλλων) τόσο καινοτόμα πρωτόκολλα αποθήκευσης δεδομένων (π.χ. IPFS), όσο και πλατφόρμες ανάπτυξης και εκτέλεσης αποκεντρωμένων εφαρμογών (π.χ. Ethereum blockchain). Στις μέρες μας, ωστόσο, παρατηρείται παράλληλα μία τάση δημιουργίας εφαρμογών που ακολουθούν αποκεντρωτικά μοντέλα λειτουργίας, στα οποία το processing και το storage κατανέμονται σε ένα σύνολο κόμβων που επικοινωνούν ομότιμα. Εντός, λοιπόν, αυτής της τάσης, αναπτύσσονται με ταχείς ρυθμούς διάφορα λογισμικά, τα οποία συνθέτουν ένα νέο, αποκεντρωτικό οικοσύστημα. Αυτό περιλαμβάνει, μεταξύ άλλων, τόσο καινοτόμα πρωτόκολλα αποθήκευσης δεδομένων (π.χ. IPFS), όσο και πλατφόρμες ανάπτυξης και εκτέλεσης αποκεντρωμένων εφαρμογών (π.χ. Ethereum blockchain).
\newpage \newpage

8
chapters/1.introduction/1.2.decentralization.tex

@ -1,6 +1,8 @@
\section{Περί αποκέντρωσης}\label{section:1-2-decentralization} \section{Περί αποκέντρωσης}\label{section:1-2-decentralization}
Αν και ο όρος "αποκέντρωση" χρησιμοποιείται ευρέως στην επιστήμη των υπολογιστών και στα κρυπτοοικονομικά\footnote{Τα "κρυπτοοικονομικά" είναι η πρακτική επιστήμη της δημιουργίας κατανεμημένων συστημάτων, οι ιδιότητες των οποίων εξασφαλίζονται με οικονομικά κίνητρα, ενώ οι οικονομικοί τους μηχανισμοί είναι κρυπτογραφικά εγγυημένοι.\cite{1.2-ethereum-learn}} (cryptoeconomics), συνήθως ορίζεται αρκετά ασαφώς\cite{1.2-the-meaning-of-decentralization}. Στην πραγματικότητα η αποκέντρωση (ή, αντίστοιχα, ο συγκεντρωτισμός) μπορεί να τοποθετηθεί πάνω σε τρεις ξεχωριστούς άξονες, οι οποίοι είναι σε γενικές γραμμές ανεξάρτητοι ο ένας από τον άλλον. Αυτοί έχουν ως εξής: Αν και ο όρος "αποκέντρωση" χρησιμοποιείται ευρέως στην επιστήμη των υπολογιστών και στα κρυπτοοικονομικά\footnote{Τα "κρυπτοοικονομικά" είναι η πρακτική επιστήμη της δημιουργίας κατανεμημένων συστημάτων, οι ιδιότητες των οποίων εξασφαλίζονται με οικονομικά κίνητρα, ενώ οι οικονομικοί τους μηχανισμοί είναι κρυπτογραφικά εγγυημένοι.\cite{1.2-ethereum-learn}} (cryptoeconomics), συνήθως ορίζεται αρκετά ασαφώς. Στην πραγματικότητα η αποκέντρωση (ή, αντίστοιχα, ο συγκεντρωτισμός) μπορεί να οριστεί επί τριών ξεχωριστών αξόνων, οι οποίοι είναι σε γενικές γραμμές ανεξάρτητοι ο ένας από τον άλλον.\cite{1.2-the-meaning-of-decentralization}
Αυτοί έχουν ως εξής:
\begin{enumerate} \begin{enumerate}
\item \textbf{Αρχιτεκτονική} αποκέντρωση: Από πόσους φυσικούς υπολογιστές αποτελείται ένα σύστημα; Πόσοι από αυτούς μπορούν, ανά πάσα στιγμή, να χαλάσουν και εκείνο να αντέξει; \item \textbf{Αρχιτεκτονική} αποκέντρωση: Από πόσους φυσικούς υπολογιστές αποτελείται ένα σύστημα; Πόσοι από αυτούς μπορούν, ανά πάσα στιγμή, να χαλάσουν και εκείνο να αντέξει;
@ -14,9 +16,9 @@
\begin{itemize} \begin{itemize}
\item \textbf{Ανοχή σε σφάλματα}: Τα αρχιτεκτονικά αποκεντρωμένα συστήματα είναι λιγότερο πιθανό να αποτύχουν τυχαία, επειδή βασίζονται σε πολλά ξεχωριστά στοιχεία που είναι απίθανο να παρουσιάσουν σφάλματα ταυτόχρονα. \item \textbf{Ανοχή σε σφάλματα}: Τα αρχιτεκτονικά αποκεντρωμένα συστήματα είναι λιγότερο πιθανό να αποτύχουν τυχαία, επειδή βασίζονται σε πολλά ξεχωριστά στοιχεία που είναι απίθανο να παρουσιάσουν σφάλματα ταυτόχρονα.
\item \textbf{Αντοχή σε επιθέσεις}: Το κόστος μίας επίθεσης, που έχει ως στόχο την καταστροφή ή τον χειρισμό ενός αποκεντρωτικού συστήματος, είναι πολύ ακριβό. Αυτό συμβαίνει επειδή δεν υπάρχει κάποιο ευαίσθητο κεντρικό σημείο στο οποίο να μπορεί να πραγματοποιηθεί μία επίθεση, η οποία να έχει κόστος πολύ χαμηλότερο από το οικονομικό μέγεθος του περιβάλλοντος συστήματος. \item \textbf{Αντοχή σε επιθέσεις}: Το κόστος μίας επίθεσης, που έχει ως στόχο την καταστροφή ή τον χειρισμό ενός αποκεντρωτικού συστήματος, είναι πολύ ακριβό. Αυτό συμβαίνει επειδή δεν υπάρχει κάποιο ευαίσθητο κεντρικό σημείο όπου να μπορεί να πραγματοποιηθεί μία επίθεση, η οποία να έχει κόστος πολύ χαμηλότερο από το οικονομικό μέγεθος του περιβάλλοντος συστήματος.
\item \textbf{Απουσία ανάγκης εκχώρησης εμπιστοσύνης}: Σε ένα ιδανικό πολιτικά αποκεντρωμένο σύστημα οι χρήστες δε χρειάζεται να εμπιστεύονται κάποια κεντρική αρχή για την επεξεργασία και την αποθήκευση των δεδομένων. \item \textbf{Απουσία ανάγκης εκχώρησης εμπιστοσύνης}: Σε ένα ιδανικό πολιτικά αποκεντρωμένο σύστημα οι χρήστες δε χρειάζεται να εμπιστεύονται κάποια κεντρική αρχή για την επεξεργασία και την αποθήκευση των δεδομένων.
\item \textbf{Αντίσταση σε συμπαιγνίες}: είναι πολύ πιο δύσκολο για τους συμμετέχοντες σε αποκεντρωμένα συστήματα να συνεργαστούν για να ενεργήσουν με τρόπο που τους ωφελεί σε βάρος άλλων συμμετεχόντων. \item \textbf{Αντίσταση σε συμπαιγνίες}: Είναι πολύ πιο δύσκολο για τους συμμετέχοντες σε αποκεντρωμένα συστήματα να συνεργαστούν για να ενεργήσουν με τρόπο που να τους ωφελεί σε βάρος άλλων συμμετεχόντων.
\end{itemize} \end{itemize}
Ιδιαίτερα τα τελευταία χρόνια, παρατηρείται μία έντονη ανάγκη υλοποίησης αποκεντρωμένων εφαρμογών (decentralized applications), οι οποίες, πέρα από τα αρχιτεκτονικά πλεονεκτήματα που τις χαρακτηρίζουν (π.χ. σταθερότητα, ασφάλεια, επεκτασιμότητα), αποσκοπούν στην επίτευξη πολιτικής αποκέντρωσης. Αυτό πηγάζει τόσο από την ανάγκη προάσπισης των αρχών που καταστρατηγούνται όταν τα δεδομένα υπάγονται στον έλεγχο κάποιας κεντρικής διαχείρισης (π.χ. της ελευθερίας του λόγου, της ανωνυμίας και της ιδιωτικότητας του χρήστη), όσο και από την ανάγκη δημιουργίας διαδικασιών που απαιτούν εγκυρότητα και αυθεντικότητα, όπως όσων σχετίζονται με την αυτοδιαχείριση και την άμεση δημοκρατία. Ως απόγειο των παραπάνω, μπορούν να θεωρηθούν οι λεγόμενες \textit{αποκεντρωτικές αυτόνομες οργανώσεις} (decentralized autonomous organizations ή DAOs), οι οποίες αποτελούν μία μορφή αλγοκρατικής\footnote{Ο όρος "αλγοκρατία" (algocracy) αναφέρεται σε εναλλακτικές μορφές διακυβέρνησης που βασίζονται στη χρήση αλγορίθμων.\cite{1.2-virtual-migration}} οργάνωσης βασισμένης σε τεχνολογίες αποκέντρωσης και, κυρίως, στο blockchain. Ιδιαίτερα τα τελευταία χρόνια, παρατηρείται μία έντονη ανάγκη υλοποίησης αποκεντρωμένων εφαρμογών (decentralized applications), οι οποίες, πέρα από τα αρχιτεκτονικά πλεονεκτήματα που τις χαρακτηρίζουν (π.χ. σταθερότητα, ασφάλεια, επεκτασιμότητα), αποσκοπούν στην επίτευξη πολιτικής αποκέντρωσης. Αυτό πηγάζει τόσο από την ανάγκη προάσπισης των αρχών που καταστρατηγούνται όταν τα δεδομένα υπάγονται στον έλεγχο κάποιας κεντρικής διαχείρισης (π.χ. της ελευθερίας του λόγου, της ανωνυμίας και της ιδιωτικότητας του χρήστη), όσο και από την ανάγκη δημιουργίας διαδικασιών που απαιτούν εγκυρότητα και αυθεντικότητα, όπως όσων σχετίζονται με την αυτοδιαχείριση και την άμεση δημοκρατία. Ως απόγειο των παραπάνω, μπορούν να θεωρηθούν οι λεγόμενες \textit{αποκεντρωτικές αυτόνομες οργανώσεις} (decentralized autonomous organizations ή DAOs), οι οποίες αποτελούν μία μορφή αλγοκρατικής\footnote{Ο όρος "αλγοκρατία" (algocracy) αναφέρεται σε εναλλακτικές μορφές διακυβέρνησης που βασίζονται στη χρήση αλγορίθμων.\cite{1.2-virtual-migration}} οργάνωσης βασισμένης σε τεχνολογίες αποκέντρωσης και, κυρίως, στο blockchain.

4
chapters/1.introduction/1.3.problem-definition.tex

@ -8,8 +8,8 @@
\item Έλλειψη \textbf{ασφάλειας}: Τα προσωπικά δεδομένα των χρηστών μπορεί να υποκλαπούν εξαιτίας κάποιας κυβερνοεπίθεσης. \item Έλλειψη \textbf{ασφάλειας}: Τα προσωπικά δεδομένα των χρηστών μπορεί να υποκλαπούν εξαιτίας κάποιας κυβερνοεπίθεσης.
\item Έλλειψη \textbf{διαθεσιμότητας}: Το σύστημα μπορεί να σταματήσει να λειτουργεί προσωρινά ή μόνιμα για τεχνικούς, οικονομικούς ή νομικούς λόγους. \item Έλλειψη \textbf{διαθεσιμότητας}: Το σύστημα μπορεί να σταματήσει να λειτουργεί προσωρινά ή μόνιμα για τεχνικούς, οικονομικούς ή νομικούς λόγους.
\item Έλλειψη \textbf{εμπιστοσύνης}: Οι κεντρικές αρχές έχουν τη δυνατότητα να παρακολουθούν τους χρήστες, να διαβάζουν, ή ακόμα και να διαρρέουν τα προσωπικά τους δεδομένα εν αγνοία των τελευταίων. Οι δε χρήστες δε διαθέτουν κανέναν τρόπο με τον οποίον να μπορούν να τις εμπιστευθούν με βεβαιότητα. \item Έλλειψη \textbf{εμπιστοσύνης}: Οι κεντρικές αρχές έχουν τη δυνατότητα να παρακολουθούν τους χρήστες, να διαβάζουν, ή ακόμα και να διαρρέουν τα προσωπικά τους δεδομένα εν αγνοία των τελευταίων. Οι δε χρήστες δε διαθέτουν κανέναν τρόπο με τον οποίον να μπορούν να τις εμπιστευθούν με βεβαιότητα.
\item Έλλειψη εγγύησης της \textbf{αυθεντικότητας} των δεδομένων: Οι κεντρικές αρχές έχουν τη δυνατότητα να τροποποιούν τα δεδομένα κατά βούληση κάτι που έχει ως αποτέλεσμα να μην υπάρχει εγγύηση ως προς την αυθεντικότητα όσων βλέπουν οι χρήστες. \item Έλλειψη εγγύησης της \textbf{αυθεντικότητας} των δεδομένων: Οι κεντρικές αρχές έχουν τη δυνατότητα να τροποποιούν τα δεδομένα κατά βούληση, κάτι που έχει ως αποτέλεσμα να μην υπάρχει εγγύηση ως προς την αυθεντικότητα των όσων βλέπουν οι χρήστες.
\item Έλλειψη εγγύησης της \textbf{ελευθερίας του λόγου}: Οι κεντρικές αρχές έχουν τη δυνατότητα να λογοκρίνουν τα δεδομένα, είτε βάσει των συμφερόντων τους, είτε βάσει υποχρεώσεών τους προς τρίτους. \item Έλλειψη εγγύησης της \textbf{ελευθερίας του λόγου}: Οι κεντρικές αρχές έχουν τη δυνατότητα να λογοκρίνουν τα δεδομένα, είτε βάσει των συμφερόντων τους, είτε βάσει υποχρεώσεών τους προς τρίτους.
\end{itemize} \end{itemize}
Επιπλέον, όπως γίνεται φανερό, οι αδυναμίες του συστήματος ως προς τον πολιτικό άξονα το καθιστούν ακατάλληλο να παρέχει στους χρήστες αυθεντικές και επικυρώσιμες δημοκρατικές διαδικασίες. Τέτοιου είδους διαδικασίες θα μπορούσε να ήταν από απλές ψηφοφορίες, μέχρι σύνθετες διαδικασίες αυτοδιαχείρισης της πλατφόρμας. Επιπλέον, όπως γίνεται φανερό, οι αδυναμίες του συστήματος ως προς τον πολιτικό άξονα το καθιστούν ακατάλληλο να παρέχει στους χρήστες αυθεντικές και επικυρώσιμες δημοκρατικές διαδικασίες. Τέτοιου είδους διαδικασίες μπορεί να είναι από απλές ψηφοφορίες, μέχρι σύνθετες διαδικασίες αυτοδιαχείρισης της πλατφόρμας.

2
chapters/1.introduction/1.4.thesis-goal.tex

@ -1,5 +1,5 @@
\section{Στόχος της διπλωματικής}\label{section:1-4-thesis-goal} \section{Στόχος της διπλωματικής}\label{section:1-4-thesis-goal}
Στόχος της παρούσας διπλωματικής εργασίας είναι η δημιουργία μίας αυτόνομης κοινωνικής πλατφόρμας, η οποία, βασιζόμενη σε τεχνολογίες αποκέντρωσης, θα λειτουργεί ανεξάρτητα από κεντρικές αρχές, παρέχοντας στους χρήστες της πλήρη ελευθερία του λόγου και κυριότητα επί των δεδομένων τους. Παράλληλα, θα παρέχει μία πλατφόρμα για ανώνυμες και αυθεντικές ψηφοφορίες, εν δυνάμει ικανών να αποτελέσουν ένα έγκυρο, έμπιστο και άμεσα δημοκρατικό βήμα λήψης αποφάσεων. Στόχος της παρούσας διπλωματικής εργασίας είναι η δημιουργία μίας αυτόνομης κοινωνικής πλατφόρμας, η οποία, βασιζόμενη σε τεχνολογίες αποκέντρωσης, θα λειτουργεί ανεξάρτητα από κεντρικές αρχές, παρέχοντας στους χρήστες της πλήρη ελευθερία του λόγου και κυριότητα επί των δεδομένων τους. Παράλληλα, θα παρέχει τη δυνατότητα διενέργειας ανώνυμων και αυθεντικών ψηφοφοριών, εν δυνάμει ικανών να αποτελέσουν ένα έγκυρο, έμπιστο και άμεσα δημοκρατικό βήμα λήψης αποφάσεων.
Η proof of concept (PoC) εφαρμογή που αναπτύχθηκε για την επίτευξη του παραπάνω στόχου ονομάζεται Concordia\footnote{Η Concordia είναι η θεά της αρχαίας Ρωμαϊκής θρησκείας που προσωποποιεί την ομόνοια. Στην ελληνική μυθολογία ταυτίζεται με τη θεότητα Ομόνοια ή τη θεά Αρμονία.} και λειτουργεί μέσω ενός συνδυασμού αποκεντρωτικών τεχνολογιών. Πιο συγκεκριμένα, στον επεξεργαστικό πυρήνα της και σαν σημείο αναφοράς αξιοποιεί τo Ethereum blockchain, ενώ για την αποθήκευση του μεγαλύτερου όγκου των δεδομένων χρησιμοποιεί το IPFS μέσω της OrbitDB. Η δε διεπαφή του χρήστη υλοποιείται με σύγχρονες μεθόδους web development σε JavaScript (React, Redux κ.ά.). Η proof of concept (PoC) εφαρμογή που αναπτύχθηκε για την επίτευξη του παραπάνω στόχου ονομάζεται Concordia\footnote{Η Concordia είναι η θεά της αρχαίας Ρωμαϊκής θρησκείας που προσωποποιεί την ομόνοια. Στην ελληνική μυθολογία ταυτίζεται με τη θεότητα Ομόνοια ή τη θεά Αρμονία.} και λειτουργεί μέσω ενός συνδυασμού αποκεντρωτικών τεχνολογιών. Πιο συγκεκριμένα, στον επεξεργαστικό πυρήνα της και σαν σημείο αναφοράς αξιοποιεί τo Ethereum blockchain, ενώ για την αποθήκευση του μεγαλύτερου όγκου των δεδομένων χρησιμοποιεί το IPFS μέσω της OrbitDB. Η δε διεπαφή του χρήστη υλοποιείται με σύγχρονες μεθόδους web development σε JavaScript (React, Redux κ.ά.).

2
chapters/1.introduction/1.5.methodology.tex

@ -4,7 +4,7 @@
Αρχικά, ορίστηκε με σαφήνεια το πρόβλημα (\hyperref[section:1-3-problem-definition]{ενότητα 1.3}) και ο στόχος της διπλωματικής (\hyperref[section:1-4-thesis-goal]{ενότητα 1.4}), λαμβάνοντας την απόφαση να περιοριστεί στον τομέα των μέσων κοινωνικής δικτύωσης και της ψηφιακής δημοκρατίας. Αρχικά, ορίστηκε με σαφήνεια το πρόβλημα (\hyperref[section:1-3-problem-definition]{ενότητα 1.3}) και ο στόχος της διπλωματικής (\hyperref[section:1-4-thesis-goal]{ενότητα 1.4}), λαμβάνοντας την απόφαση να περιοριστεί στον τομέα των μέσων κοινωνικής δικτύωσης και της ψηφιακής δημοκρατίας.
Στη συνέχεια, πραγματοποιήθηκε έρευνα του χώρου των αποκεντρωμένων τεχνολογιών και ξεκίνησε η διαδικασία της σχεδίασης της εφαρμογής, μέσω της επιλογής του μοντέλου της τεχνολογικής στοίβας και του κατάλληλου λογισμικού σε κάθε επίπεδό της. Στη συνέχεια, πραγματοποιήθηκε έρευνα του χώρου των αποκεντρωμένων τεχνολογιών και ξεκίνησε η διαδικασία της σχεδίασης της εφαρμογής, μέσω της επιλογής του μοντέλου της τεχνολογικής στοίβας και του κατάλληλου λογισμικού για κάθε επίπεδό της.
Ακολούθησε η διαδικασία υλοποίησης της πιλοτικής πλατφόρμας Concordia, με στόχο να καταστεί ο αρχικός σχεδιασμός πραγματοποιήσιμος. Ακολούθησε η διαδικασία υλοποίησης της πιλοτικής πλατφόρμας Concordia, με στόχο να καταστεί ο αρχικός σχεδιασμός πραγματοποιήσιμος.

12
chapters/2.theoretical-background/2.2.asymmetric-cryptography.tex

@ -3,11 +3,11 @@
Η ασύμμετρη κρυπτογραφία (asymmetric cryptography) ή κρυπτογραφία δημόσιου κλειδιού (public-key cryptography) αποτελεί κρυπτογραφικό σύστημα που βασίζεται στη χρήση ενός ζεύγους κλειδιών (key pair), του \textit{δημόσιου} (public key) και του \textit{ιδιωτικού} (private key). Αυτά τα κλειδιά είναι μαθηματικά συνδεδεμένα ως εξής: Η ασύμμετρη κρυπτογραφία (asymmetric cryptography) ή κρυπτογραφία δημόσιου κλειδιού (public-key cryptography) αποτελεί κρυπτογραφικό σύστημα που βασίζεται στη χρήση ενός ζεύγους κλειδιών (key pair), του \textit{δημόσιου} (public key) και του \textit{ιδιωτικού} (private key). Αυτά τα κλειδιά είναι μαθηματικά συνδεδεμένα ως εξής:
\begin{itemize} \begin{itemize}
\item Το ιδιωτικό κλειδί δε μπορεί να προκύψει γνωρίζοντας το δημόσιό του \item Το ιδιωτικό κλειδί δε μπορεί να προκύψει γνωρίζοντας το δημόσιό του.
\item Ό,τι κρυπτογραφηθεί από το ένα μπορεί να αποκρυπτογραφηθεί μόνο από το άλλο \item Ό,τι κρυπτογραφηθεί από το ένα μπορεί να αποκρυπτογραφηθεί μόνο από το άλλο.
\end{itemize} \end{itemize}
Η δημιουργία ενός ζεύγους κλειδιών επιτυγχάνεται μέσω μιας \textit{γεννήτριας κλειδιών} (\textenglish{key generation function}), η οποία χρησιμοποιεί ειδικούς αλγορίθμους (π.χ. RSA), δεχόμενη ως είσοδο έναν τυχαίο αριθμό. Από τα παραχθέντα κλειδιά, το δημόσιο γνωστοποιείται σε τρίτους, ενώ το ιδιωτικό παραμένει μυστικό. Η δημιουργία ενός ζεύγους κλειδιών επιτυγχάνεται μέσω μιας γεννήτριας κλειδιών (\textenglish{key generation function}), η οποία χρησιμοποιεί ειδικούς αλγορίθμους (π.χ. RSA), δεχόμενη ως είσοδο έναν τυχαίο αριθμό. Από τα παραχθέντα κλειδιά, το δημόσιο γνωστοποιείται σε τρίτους, ενώ το ιδιωτικό παραμένει μυστικό.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
@ -18,11 +18,11 @@
Ο χρήστης μπορεί να χρησιμοποιήσει τα κλειδιά για δύο βασικούς σκοπούς: Ο χρήστης μπορεί να χρησιμοποιήσει τα κλειδιά για δύο βασικούς σκοπούς:
\begin{enumerate} \begin{enumerate}
\item Για να αποκρυπτογραφήσει μηνύματα άλλων χρηστών, οι οποίοι τα κρυπτογράφησαν χρησιμοποιώντας το δημόσιο κλειδί του. Με αυτόν τον τρόπο εξασφαλίζεται η \textit{εμπιστευτικότητα} (confidentiality). \item Για να αποκρυπτογραφήσει μηνύματα άλλων χρηστών, οι οποίοι τα κρυπτογράφησαν χρησιμοποιώντας το δημόσιο κλειδί του. Με αυτόν τον τρόπο εξασφαλίζεται η \textbf{εμπιστευτικότητα} (confidentiality).
\item Για να υπογράψει ψηφιακά ένα μήνυμα, κρυπτογραφώντας το hash των δεδομένων του με το ιδιωτικό του κλειδί. Έτσι, ο παραλήπτης του μηνύματος μπορεί μέσω της ληφθείσας \textit{ψηφιακής υπογραφής} (digital signature): \item Για να υπογράψει ψηφιακά ένα μήνυμα, κρυπτογραφώντας το hash των δεδομένων του με το ιδιωτικό του κλειδί. Έτσι, ο παραλήπτης του μηνύματος μπορεί μέσω της ληφθείσας \textit{ψηφιακής υπογραφής} (digital signature):
\begin{enumerate} \begin{enumerate}
\item Να επαληθεύσει την ταυτότητα του αποστολέα, αποκρυπτογραφώντας επιτυχώς την ψηφιακή υπογραφή με το δημόσιο κλειδί του τελευταίου. Εξασφαλίζεται έτσι η \textit{πιστοποίηση} (authenticity) της προέλευσης των δεδομένων. \item Να επαληθεύσει την ταυτότητα του αποστολέα, αποκρυπτογραφώντας επιτυχώς την ψηφιακή υπογραφή με το δημόσιο κλειδί του τελευταίου. Εξασφαλίζεται έτσι η \textbf{πιστοποίηση} (authenticity) της προέλευσης των δεδομένων.
\item Να επιβεβαιώσει ότι το μήνυμα έφτασε αναλλοίωτο, εφόσον το hash των δεδομένων συμπίπτει με το hash εντός της ψηφιακής υπογραφής. Με αυτόν τον τρόπο εξασφαλίζεται η \textit{ακεραιότητα} (integrity) των δεδομένων. \item Να επιβεβαιώσει ότι το μήνυμα έφτασε αναλλοίωτο, εφόσον το hash των δεδομένων συμπίπτει με το hash εντός της ψηφιακής υπογραφής. Με αυτόν τον τρόπο εξασφαλίζεται η \textbf{ακεραιότητα} (integrity) των δεδομένων.
\end{enumerate} \end{enumerate}
\end{enumerate} \end{enumerate}

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

@ -1,6 +1,6 @@
\section{Δένδρα Merkle} \label{section:2-3-merkle-trees} \section{Δένδρα Merkle} \label{section:2-3-merkle-trees}
Ένα δένδρο Merkle (Merkle tree ή hash tree) είναι μία δενδρική δομή δεδομένων, η οποία απαρτίζεται από φύλλα (leaf nodes) που περιέχουν hashes από blocks δεδομένων και από άλλους κόμβους (non-leaf nodes) που περιέχουν τα hashes των θυγατρικών τους. Στην κορυφή του δένδρου βρίσκεται ο ριζικός κόμβος με το λεγόμενο root hash.\cite{2.3-merkle-tree} Ένα δένδρο Merkle (Merkle tree ή hash tree) είναι μία δενδρική δομή δεδομένων, η οποία απαρτίζεται από φύλλα (leaf nodes) που περιέχουν hashes από blocks δεδομένων και από άλλους κόμβους (non-leaf nodes) που περιέχουν hashes των hashes των θυγατρικών τους. Στην κορυφή του δένδρου βρίσκεται ο ριζικός κόμβος με το λεγόμενο root hash.\cite{2.3-merkle-tree}
Η πιο συνηθισμένη υλοποίηση είναι το δυαδικό (binary) δένδρο Merkle, το οποίο περιλαμβάνει δύο θυγατρικούς κόμβους (child nodes) κάτω από κάθε γονικό (non-leaf) κόμβο, και είναι αυτό που αναλύεται στη συνέχεια. Η πιο συνηθισμένη υλοποίηση είναι το δυαδικό (binary) δένδρο Merkle, το οποίο περιλαμβάνει δύο θυγατρικούς κόμβους (child nodes) κάτω από κάθε γονικό (non-leaf) κόμβο, και είναι αυτό που αναλύεται στη συνέχεια.
@ -12,9 +12,9 @@
Τα Merkle trees επιτρέπουν την αποδοτική και ασφαλή επαλήθευση των περιεχομένων που ανήκουν σε σετ δεδομένων μεγάλου μεγέθους. Η βασική ιδιότητα είναι ότι για κάθε σετ δεδομένων υπάρχει ακριβώς ένα πιθανό δένδρο, το οποίο δε γίνεται να τροποποιηθεί χωρίς να αλλάξει ταυτόχρονα και το root hash. Τα Merkle trees επιτρέπουν την αποδοτική και ασφαλή επαλήθευση των περιεχομένων που ανήκουν σε σετ δεδομένων μεγάλου μεγέθους. Η βασική ιδιότητα είναι ότι για κάθε σετ δεδομένων υπάρχει ακριβώς ένα πιθανό δένδρο, το οποίο δε γίνεται να τροποποιηθεί χωρίς να αλλάξει ταυτόχρονα και το root hash.
Έτσι, μέσω των λεγόμενων Merkle proofs, μπορούμε: Έτσι, μέσω των λεγόμενων Merkle proof, μπορούμε:
\begin{itemize} \begin{itemize}
\item Να αποφανθούμε εάν κάποια δεδομένα ανήκουν στο δένδρο, υπολογίζοντας (για το εκάστοτε leaf node) hashes πλήθους ανάλογου του λογαρίθμου του συνολοικού αριθμού των φύλλων. \item Να αποφανθούμε εάν κάποια δεδομένα ανήκουν στο δένδρο, υπολογίζοντας (για το εκάστοτε leaf node) hashes πλήθους ανάλογου του λογαρίθμου του συνολικού αριθμού των φύλλων.
\item Να αποδείξουμε συνοπτικά την εγκυρότητα ενός τμήματος κάποιου σετ δεδομένων, χωρίς να χρειαστεί να αποθηκεύσουμε ολόκληρο το σύνολο δεδομένων. \item Να αποδείξουμε συνοπτικά την εγκυρότητα ενός τμήματος κάποιου σετ δεδομένων, χωρίς να χρειαστεί να αποθηκεύσουμε ολόκληρο το σύνολο δεδομένων.
\item Να διασφαλίσουμε την εγκυρότητα ενός συγκεκριμένου συνόλου δεδομένων εντός ενός μεγαλύτερου σύνολου, χωρίς να χρειαστεί να αποκαλυφθεί το περιεχόμενο οποιουδήποτε εκ των δύο.\cite{2.3-merkle-proofs-explained} \item Να διασφαλίσουμε την εγκυρότητα ενός συγκεκριμένου συνόλου δεδομένων εντός ενός μεγαλύτερου σύνολου, χωρίς να χρειαστεί να αποκαλυφθεί το περιεχόμενο οποιουδήποτε εκ των δύο.\cite{2.3-merkle-proofs-explained}
\end{itemize} \end{itemize}

24
chapters/2.theoretical-background/2.6.ethereum.tex

@ -5,7 +5,7 @@
Το Ethereum είναι ένα δημόσιο blockchain ανοιχτού κώδικα με εγγενές κρυπτονόμισμα το Ether (ETH). Παρέχει μία προγραμματιστική πλατφόρμα με ενσωματωμένη μία Turing-complete γλώσσα προγραμματισμού, που μπορεί να χρησιμοποιηθεί για τη δημιουργία αποκεντρωμένων εφαρμογών (Decentralized Applications ή DApps) μέσω της χρήσης "έξυπνων συμβολαίων" (smart contracts).\cite{2.6-ethereum-whitepaper} Το Ethereum είναι ένα δημόσιο blockchain ανοιχτού κώδικα με εγγενές κρυπτονόμισμα το Ether (ETH). Παρέχει μία προγραμματιστική πλατφόρμα με ενσωματωμένη μία Turing-complete γλώσσα προγραμματισμού, που μπορεί να χρησιμοποιηθεί για τη δημιουργία αποκεντρωμένων εφαρμογών (Decentralized Applications ή DApps) μέσω της χρήσης "έξυπνων συμβολαίων" (smart contracts).\cite{2.6-ethereum-whitepaper}
\subsection{Λογαριασμοί} \label{subsection:2-6-1-ethereum-accounts} \subsection{Λογαριασμοί} \label{subsection:2-6-1-ethereum-accounts}
Στο Ethereum blockchain οι λογαριασμοί αποτελούν οντότητες οι οποίες μπορούν να δέχονται, να κρατούν και να στέλνουν ETH και tokens, καθώς και να αλληλεπιδρούν με smart contracts.\cite{2.6-ethereum-documentation} Χωρίζονται σε δύο κατηγορίες: στους λογαριασμούς εξωτερικής κατοχής (\textenglish{externally owned accounts} ή EOAs) και στους λογαριασμούς συμβολαίων (contract accounts). Στο Ethereum blockchain οι λογαριασμοί αποτελούν οντότητες οι οποίες μπορούν να δέχονται, να κρατούν και να στέλνουν ETH και token, καθώς και να αλληλεπιδρούν με smart contracts.\cite{2.6-ethereum-documentation} Χωρίζονται σε δύο κατηγορίες: στους λογαριασμούς εξωτερικής κατοχής (\textenglish{externally owned accounts} ή EOAs) και στους λογαριασμούς συμβολαίων (contract accounts).
Οι λογαριασμοί εξωτερικής κατοχής δημιουργούνται χωρίς κόστος και ελέγχονται μέσω ιδιωτικών κλειδιών. Μπορούν να πραγματοποιούν μόνο συναλλαγές μεταφοράς ETH ή κάποιου token. Οι λογαριασμοί εξωτερικής κατοχής δημιουργούνται χωρίς κόστος και ελέγχονται μέσω ιδιωτικών κλειδιών. Μπορούν να πραγματοποιούν μόνο συναλλαγές μεταφοράς ETH ή κάποιου token.
@ -26,18 +26,18 @@
Η δημιουργία των λογαριασμών επιτυγχάνεται μέσω της παραγωγής ενός ζεύγους κλειδιών, αξιοποιώντας τον Η δημιουργία των λογαριασμών επιτυγχάνεται μέσω της παραγωγής ενός ζεύγους κλειδιών, αξιοποιώντας τον
ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι, το ιδιωτικό κλειδί χρησιμοποιείται για να υπογράφονται ψηφιακά οι συναλλαγές, ενώ το δημόσιο ορίζει τη δημόσια διεύθυνση του λογαριασμού (είναι της μορφής "0x + τα 20 τελευταία bytes του Keccak-256\footnote{Ο Keccak-256 αποτελεί τον κρυπτογραφικό αλγόριθμο κατακερματισμού που χρησιμοποειίται στο Ethereum. Πρόκειται για τον αλγόριθμο SHA3-256 πριν την τυποποίησή του από το NIST.} hash του δημόσιου κλειδιού"). ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι, το ιδιωτικό κλειδί χρησιμοποιείται για να υπογράφονται ψηφιακά οι συναλλαγές, ενώ το δημόσιο ορίζει τη δημόσια διεύθυνση του λογαριασμού (είναι της μορφής "0x + τα 20 τελευταία bytes του Keccak-256\footnote{Ο Keccak-256 αποτελεί τον κρυπτογραφικό αλγόριθμο κατακερματισμού που χρησιμοποειίται στο Ethereum. Πρόκειται για τον αλγόριθμο SHA3-256 πριν την τυποποίησή του από το NIST.} hash του δημόσιου κλειδιού").
Κατά κύριο λόγο, οι χρήστες παράγουν και διαχειρίζονται τα ιδιωτικά κλειδιά των λογαριασμών εξωτερικής κατοχής μέσω ενός πορτοφολιού (wallet). Τα wallets αποτελούν εφαρμογές, οι οποίες δείχνουν το balance του λογαριασμού και παρέχουν τη δυνατότητα αποστολής/ λήψης ETH και tokens από/ σε αυτόν. Ορισμένα προτοφόλια προσφέρουν περαιτέρω λειτουργίες, σημαντικότερη εκ των οποίων είναι η διασύνδεση του λογαριασμού με αποκεντρωμένες εφαρμογές. Επί του παρόντος, το πιο διαδεδομένο πορτοφόλι τέτοιου τύπου είναι το MetaMask\footnote{\url{https://metamask.io/}}. Κατά κύριο λόγο, οι χρήστες παράγουν και διαχειρίζονται τα ιδιωτικά κλειδιά των λογαριασμών εξωτερικής κατοχής μέσω ενός πορτοφολιού (wallet). Τα wallets αποτελούν εφαρμογές, οι οποίες δείχνουν το balance του λογαριασμού και παρέχουν τη δυνατότητα αποστολής/ λήψης ETH και token από/ σε αυτόν. Ορισμένα προτοφόλια προσφέρουν περαιτέρω λειτουργίες, σημαντικότερη εκ των οποίων είναι η διασύνδεση του λογαριασμού με αποκεντρωμένες εφαρμογές. Επί του παρόντος, το πιο διαδεδομένο πορτοφόλι τέτοιου τύπου είναι το MetaMask\footnote{\url{https://metamask.io/}}.
\subsection{Smart Contracts} \subsection{Smart Contracts}
Με λίγα λόγια, τα smart contracts αποτελούν αυτόνομα κομμάτια κώδικα, τα οποία είναι αποθηκευμένα στο blockchain και ενεργοποιούνται μέσω συναλλαγών. Κληρονομούν ιδιότητες του blockchain, όπως τη διαφάνεια (transparency), την επαληθευσιμότητα (verifiability) και την αμεταβλητότητα (immutability). Με λίγα λόγια, τα smart contracts αποτελούν αυτόνομα κομμάτια κώδικα, τα οποία είναι αποθηκευμένα στο blockchain και ενεργοποιούνται μέσω συναλλαγών. Κληρονομούν ιδιότητες του blockchain, όπως τη διαφάνεια (transparency), την επαληθευσιμότητα (verifiability) και την αμεταβλητότητα (immutability).
Ένα παράδειγμα της καθημερινότητας που μπορεί να παρομοιασθεί λειτουργικά με smart contract είναι ο αυτόματος πωλητής.\cite{2.6-ethereum-smart-contracts} Ένας αυτόματος πωλητής ορίζεται ως ένα αυτόνομο μηχάνημα που διανέμει αγαθά ή παρέχει υπηρεσίες, όταν εισαχθεί σε αυτόν κάποιο χρηματικό ποσό και επιλεχθεί ένα διαθέσιμο προϊόν. Οι αυτόματοι πωλητές είναι προγραμματισμένοι να εκτελούν συγκεκριμένους κανόνες, που θα μπορούσαν να οριστούν σε ένα συμβόλαιο. Με όμοιο τρόπο, σε ένα smart contract μπορούν να κωδικοποιηθούν αυθαίρετες συναρτήσεις μετάβασης, επιτρέποντας τη δημιουργία μίας πληθώρας αποκεντρωμένων εφαρμογών. Ένα παράδειγμα της καθημερινότητας που μπορεί να παρομοιασθεί λειτουργικά με smart contract είναι ο αυτόματος πωλητής\cite{2.6-ethereum-smart-contracts}. Ένας αυτόματος πωλητής ορίζεται ως ένα αυτόνομο μηχάνημα που διανέμει αγαθά ή παρέχει υπηρεσίες, όταν εισαχθεί σε αυτόν κάποιο χρηματικό ποσό και επιλεχθεί ένα διαθέσιμο προϊόν. Οι αυτόματοι πωλητές είναι προγραμματισμένοι να εκτελούν συγκεκριμένους κανόνες, που θα μπορούσαν να οριστούν σε ένα συμβόλαιο. Με όμοιο τρόπο, σε ένα smart contract μπορούν να κωδικοποιηθούν αυθαίρετες συναρτήσεις μετάβασης, επιτρέποντας τη δημιουργία μίας πληθώρας αποκεντρωμένων εφαρμογών.
Όπως προαναφέρθηκε στην υποενότητα \ref{subsection:2-6-1-ethereum-accounts}, τα smart contracts εντάσσονται σε contract accounts και απαιτούν την καταβολή τελών για τη δημιουργία τους, αφού χρειάζεται να εγγράψουν επί του blockchain τον κώδικα και τα αρχικά δεδομένα τους. Όπως προαναφέρθηκε στην υποενότητα \ref{subsection:2-6-1-ethereum-accounts}, τα smart contracts εντάσσονται σε contract accounts και απαιτούν την καταβολή τελών για τη δημιουργία τους, αφού χρειάζεται να εγγράψουν επί του blockchain τον κώδικα και τα αρχικά δεδομένα τους.
Επιπλέον, ο κώδικάς τους ενεργοποιείται μονάχα όταν δεχθούν μία έγκυρη συναλλαγή από κάποιον άλλον λογαριασμό (είτε εξωτερικής κατοχής, είτε συμβολαίου). Η συναλλαγή αυτή εμπεριέχει, πέρα από το απαιτούμενο fee, ένα συνοδευτικό μήνυμα με πληροφορίες σχετικές με τη συνάρτηση που πρέπει να εκτελεστεί. Η δε συνάρτηση μπορεί να πραγματοποιεί ποικίλες διαφορετικές ενέργειες, όπως την ανάγνωση και την εγγραφή στην εσωτερική αποθήκευση, την πραγματοποίηση νέων συναλλαγών, ή, ακόμα, τη δημιουργία νέων συμβολαίων. Επιπλέον, ο κώδικάς τους ενεργοποιείται μονάχα όταν δεχθούν μία έγκυρη συναλλαγή από κάποιον άλλον λογαριασμό (είτε εξωτερικής κατοχής, είτε συμβολαίου). Η συναλλαγή αυτή εμπεριέχει, πέρα από το απαιτούμενο fee, ένα συνοδευτικό μήνυμα με πληροφορίες σχετικές με τη συνάρτηση που πρέπει να εκτελεστεί. Η δε συνάρτηση μπορεί να πραγματοποιεί ποικίλες διαφορετικές ενέργειες, όπως την ανάγνωση και την εγγραφή στην εσωτερική αποθήκευση, την πραγματοποίηση νέων συναλλαγών, ή, ακόμα, τη δημιουργία νέων συμβολαίων.
Η σύνταξη των smart contracts γίνεται κατά βάση σε γλώσσες υψηλού επιπέδου και, συγκεκριμένα, στις Solidity, Vyper και Fe\footnote{\url{https://soliditylang.org/}, \url{https://github.com/vyperlang/vyper} και \url{https://fe-lang.org/}}. Πριν την εγγραφή τους στο blockchain, μεταγλωττίζονται σε εμηνεύσιμο από την EVM bytecode, η οποία είναι υπεύθυνη για την αποθήκευση και την εκτέλεσή του (βλ. υποενότητα \ref{subsection:2-6-5-evm}). Η σύνταξη των smart contracts γίνεται κατά βάση σε γλώσσες υψηλού επιπέδου και, συγκεκριμένα, στις Solidity, Vyper και Fe\footnote{Βλ. αντίστοιχα \url{https://soliditylang.org/}, \url{https://github.com/vyperlang/vyper} και \url{https://fe-lang.org/}}. Πριν την εγγραφή τους στο blockchain, μεταγλωττίζονται σε bytecode εμηνεύσιμο από την EVM, η οποία είναι υπεύθυνη για την αποθήκευση και την εκτέλεσή του (βλ. υποενότητα \ref{subsection:2-6-5-evm}).
\subsection{DApps} \subsection{DApps}
Οι DApps στο οικοσύστημα του Ethereum είναι εφαρμογές οι οποίες συνδυάζουν \textenglish{smart contracts} και \textenglish{frontend UIs}. Είναι ντετερμινιστικές, Turing-complete και εκτελούνται απομονωμένα στην EVM.\cite{2.6-ethereum-documentation} Οι DApps στο οικοσύστημα του Ethereum είναι εφαρμογές οι οποίες συνδυάζουν \textenglish{smart contracts} και \textenglish{frontend UIs}. Είναι ντετερμινιστικές, Turing-complete και εκτελούνται απομονωμένα στην EVM.\cite{2.6-ethereum-documentation}
@ -47,7 +47,7 @@ ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι
Ωστόσο, χαρακτηρίζονται και από μία σειρά αξιοσημείωτων μειονεκτημάτων, όπως τα παρακάτω: Ωστόσο, χαρακτηρίζονται και από μία σειρά αξιοσημείωτων μειονεκτημάτων, όπως τα παρακάτω:
\begin{itemize} \begin{itemize}
\item Δυσκολία συντήρησης: Συντηρούνται δυσκολότερα από τις συγκεντρωτικές εφαρμογές, εξαιτίας της αμεταβλητότητας του κώδικα και των δεδομένων επί του blockchain. \item Δυσκολία συντήρησης: Συντηρούνται δυσκολότερα από τις συγκεντρωτικές εφαρμογές, εξαιτίας της αμεταβλητότητας του κώδικα και των δεδομένων επί του blockchain.
\item Επιβάρυνση απόδοσης: Υπάρχει τεράστια επιβάρυνση απόδοσης (performance overhead) και η κλιμάκωση (scaling) είναι πολύ δύσκολη, καθώς απαιτείται όλοι οι κόμβοι να εκτελούν και να αποθηκεύουν όλες τις συναλλαγές. \item Επιβάρυνση απόδοσης: Υπάρχει τεράστια επιβάρυνση απόδοσης (performance overhead) και η κλιμάκωση (scaling) είναι πολύ δύσκολη, καθώς απαιτείται από όλους τους κόμβους να εκτελούν και να αποθηκεύουν όλες τις συναλλαγές.
\item Συμφόρηση δικτύου: Επί του παρόντος, το δίκτυο μπορεί να επεξεργαστεί μόνο περίπου 10-15 συναλλαγές ανά δευτερόλεπτο. Εάν οι συναλλαγές αποστέλλονται με ταχύτερο ρυθμό από αυτόν, θα αυξάνονται παράλληλα και οι μη επιβεβαιωμένες συναλλαγές που αναμένουν να εκτελεστούν. \item Συμφόρηση δικτύου: Επί του παρόντος, το δίκτυο μπορεί να επεξεργαστεί μόνο περίπου 10-15 συναλλαγές ανά δευτερόλεπτο. Εάν οι συναλλαγές αποστέλλονται με ταχύτερο ρυθμό από αυτόν, θα αυξάνονται παράλληλα και οι μη επιβεβαιωμένες συναλλαγές που αναμένουν να εκτελεστούν.
\item Κακή εμπειρία χρήστη: Επί του παρόντος, είναι δύσκολο για τον μέσο τελικό χρήστη να αλληλεπιδράσει με το blockchain με ευκολία και ασφάλεια, καθώς απαιτούνται ενέργειες όπως η εγκατάσταση ειδικών εργαλείων για τη διασύνδεση με αυτό, η δημιουργία wallet, η διαφύλαξη του ιδιωτικού του κλειδιού και η προσθήκη ETH για την εξόφληση των τελών. \item Κακή εμπειρία χρήστη: Επί του παρόντος, είναι δύσκολο για τον μέσο τελικό χρήστη να αλληλεπιδράσει με το blockchain με ευκολία και ασφάλεια, καθώς απαιτούνται ενέργειες όπως η εγκατάσταση ειδικών εργαλείων για τη διασύνδεση με αυτό, η δημιουργία wallet, η διαφύλαξη του ιδιωτικού του κλειδιού και η προσθήκη ETH για την εξόφληση των τελών.
\end{itemize} \end{itemize}
@ -56,19 +56,19 @@ ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι
\begin{enumerate} \begin{enumerate}
\item Οικονομικές εφαρμογές, οι οποίες παρέχουν στους χρήστες ισχυρούς τρόπους διαχείρισης και σύναψης συμβάσεων χρησιμοποιώντας τα χρήματά τους. Αυτό περιλαμβάνει υπονομίσματα, χρηματοοικονομικά παράγωγα, συμβάσεις αντιστάθμισης κινδύνου, πορτοφόλια αποταμίευσης, διαθήκες και ακόμα και ορισμένες κατηγορίες συμβάσεων εργασίας πλήρους κλίμακας. \item Οικονομικές εφαρμογές, οι οποίες παρέχουν στους χρήστες ισχυρούς τρόπους διαχείρισης και σύναψης συμβάσεων χρησιμοποιώντας τα χρήματά τους. Αυτό περιλαμβάνει υπονομίσματα, χρηματοοικονομικά παράγωγα, συμβάσεις αντιστάθμισης κινδύνου, πορτοφόλια αποταμίευσης, διαθήκες και ακόμα και ορισμένες κατηγορίες συμβάσεων εργασίας πλήρους κλίμακας.
\item Ημι-οικονομικές εφαρμογές, όπου εμπλέκονται χρήματα, αλλά η λειτουργία τους εμπεριέχει παράλληλα και μία αξιοσημείωτη μη νομισματική πλευρά. Ένα τέτοιο παράδειγμα είναι οι αυτόματες πληρωμές για λύσεις σε υπολογιστικά προβλήματα (βλ. Gitcoin). \item Ημι-οικονομικές εφαρμογές, όπου εμπλέκονται χρήματα, αλλά η λειτουργία τους εμπεριέχει παράλληλα και μία αξιοσημείωτη μη νομισματική πλευρά. Ένα τέτοιο παράδειγμα είναι οι αυτόματες πληρωμές για λύσεις σε υπολογιστικά προβλήματα (βλ. Gitcoin\footnote{\url{https://gitcoin.co/}}).
\item Μη οικονομικές εφαρμογές, όπως η αποκεντρωμένη αποθήκευση δεδομένων, συστήματα ταυτότητας (identity) και φήμης (reputation), διαδικτυακές ψηφοφορίες και αποκεντρωμένη διακυβέρνηση. Οι τελευταίες εισάγουν και την έννοια των Αποκεντρωμένων Αυτόνομων Οργανώσεων (Decentralized Autonomous Organizations ή DAOs), οντοτήτων που ενεργούν αυτόνομα, χωρίς την ανάγκη διαμεσολάβησης κάποιας συγκεντρωτικής (\textenglish{centralized}) αρχής.\cite{2.6-ethereum-whitepaper} \item Μη οικονομικές εφαρμογές, όπως η αποκεντρωμένη αποθήκευση δεδομένων, συστήματα ταυτότητας (identity) και φήμης (reputation), διαδικτυακές ψηφοφορίες και αποκεντρωμένη διακυβέρνηση. Οι τελευταίες εισάγουν και την έννοια των Αποκεντρωμένων Αυτόνομων Οργανώσεων (Decentralized Autonomous Organizations ή DAOs), οντοτήτων που ενεργούν αυτόνομα, χωρίς την ανάγκη διαμεσολάβησης κάποιας συγκεντρωτικής αρχής.\cite{2.6-ethereum-whitepaper}
\end{enumerate} \end{enumerate}
\subsection{Tokens} \subsection{Tokens}
Η λέξη "token" προέρχεται από τη λέξη "tācen" των Παλαιών Αγγλικών και σημαίνει σημάδι ή Η λέξη "token" προέρχεται από τη λέξη "tācen" των Παλαιών Αγγλικών και σημαίνει σημάδι ή
σύμβολο. Στην καθημερινότητα, ο όρος χρησιμοποιείται, κατά κύριο λόγο, για την περιγραφή αντικειμένων ειδικού σκοπού, τα οποία μοιάζουν με κέρματα και έχουν ασήμαντη εγγενή αξία (π.χ. μάρκες παιχνιδιών). Συνήθως, η χρήση των tokens περιορίζεται σε συγκεκριμένες επιχειρήσεις, οργανισμούς ή τοποθεσίες, πράγμα το οποίο σημαίνει ότι δεν ανταλλάσσονται εύκολα και τυπικά έχουν μόνο μία λειτουργία.\cite{2.6-ethereum-mastering} σύμβολο. Στην καθημερινότητα ο όρος χρησιμοποιείται, κατά κύριο λόγο, για την περιγραφή αντικειμένων ειδικού σκοπού, τα οποία μοιάζουν με κέρματα και έχουν ασήμαντη εγγενή αξία (π.χ. μάρκες παιχνιδιών). Συνήθως, η χρήση των token περιορίζεται σε συγκεκριμένες επιχειρήσεις, οργανισμούς ή τοποθεσίες, πράγμα το οποίο σημαίνει ότι δεν ανταλλάσσονται εύκολα και τυπικά έχουν μόνο μία λειτουργία.\cite{2.6-ethereum-mastering}
Ωστόσο, στο Ethereum blockchain η έννοια των tokens επεκτείνεται και επαναπροσδιορίζεται. Πλέον δεν υπάρχουν περιορισμοί χρήσης και ιδιοκτησίας, ενώ η αξία τους ποικίλει, ανάλογα με το τι αντιπροσωπεύουν (π.χ. νομίσματα, περιουσιακά στοιχεία, ή δικαιώματα πρόσβασης). Μπορούν, δε, να ανταλλαχθούν σε παγκόσμιο επίπεδο, για άλλα tokens ή για άλλα νομίσματα. Ωστόσο, στο Ethereum blockchain η έννοια των token επεκτείνεται και επαναπροσδιορίζεται. Πλέον δεν υπάρχουν περιορισμοί χρήσης και ιδιοκτησίας, ενώ η αξία τους ποικίλει, ανάλογα με το τι αντιπροσωπεύουν (π.χ. νομίσματα, περιουσιακά στοιχεία, ή δικαιώματα πρόσβασης). Μπορούν, δε, να ανταλλαχθούν σε παγκόσμιο επίπεδο, για άλλα token ή για άλλα νομίσματα.
Τα tokens που ορίζονται σε Ethereum smart contracts μπορούν να έχουν μία ή περισσότερες από τις παρακάτω χρήσεις: Τα token που ορίζονται σε Ethereum smart contracts μπορούν να έχουν μία ή περισσότερες από τις παρακάτω χρήσεις:
\begin{itemize} \begin{itemize}
\item Νόμισμα (currency) \item Νόμισμα (currency)
@ -85,9 +85,9 @@ ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι
\item Χρησιμότητα (utility), για πρόσβαση ή πληρωμή μίας υπηρεσίας \item Χρησιμότητα (utility), για πρόσβαση ή πληρωμή μίας υπηρεσίας
\end{itemize} \end{itemize}
Ένα σημαντικό κριτήριο κατηγοριοποίησης των tokens είναι η εναλλαξιμότητα (fungibility) τους. Ένα token είναι εναλλάξιμο όταν οποιαδήποτε μονάδα του μπορεί να αντικατασταθεί με μία άλλη χωρίς καμία διαφορά στην αξία ή τη λειτουργία του. Από την άλλη πλευρά, ένα non-fungible token (NFT) αντιπροσωπεύει ένα μοναδικό υλικό ή άυλο στοιχείο και, επομένως, είναι μη εναλλάξιμο. Ένα σημαντικό κριτήριο κατηγοριοποίησης των token είναι η εναλλαξιμότητα (fungibility) τους. Ένα token είναι εναλλάξιμο όταν οποιαδήποτε μονάδα του μπορεί να αντικατασταθεί με μία άλλη χωρίς καμία διαφορά στην αξία ή τη λειτουργία του. Από την άλλη πλευρά, ένα non-fungible token (NFT) αντιπροσωπεύει ένα μοναδικό υλικό ή άυλο στοιχείο και, επομένως, είναι μη εναλλάξιμο.
Τέλος, τα tokens συχνά ακολουθούν κάποια καθορισμένα standards στην υλοποίησή τους. Τα δημοφιλέστερα από αυτά είναι τα ERC-20 και ERC-777 (για fungible tokens), το ERC-721 (για NFTs) και το ERC-1155 (για semi-fungible tokens ή SFTs). Τέλος, τα token συχνά ακολουθούν κάποια καθορισμένα standards στην υλοποίησή τους. Τα δημοφιλέστερα από αυτά είναι τα ERC-20 και ERC-777 (για fungible token), το ERC-721 (για NFTs) και το ERC-1155 (για semi-fungible token ή SFTs).
\subsection{EVM} \label{subsection:2-6-5-evm} \subsection{EVM} \label{subsection:2-6-5-evm}
Τα smart contracts (και, κατ' επέκταση, οι DApps) εκτελούνται από την εικονική μηχανή του Ethereum (Ethereum Virtual Machine ή EVM). Η EVM αποτελεί μία quasi\footnote{"Quasi" ("σχεδόν") επειδή όλες οι διαδικασίες εκτέλεσης περιορίζονται σε έναν πεπερασμένο αριθμό υπολογιστικών βημάτων από την ποσότητα gas που είναι διαθέσιμη για οποιαδήποτε εκτέλεση ενός smart contract.}–Turing-complete μηχανή καταστάσεων αρχιτεκτονικής βασισμένης σε στοίβα (stack-based architecture). Σε υψηλό επίπεδο, η EVM μπορεί να θεωρηθεί ως ένας παγκόσμιος αποκεντρωμένος υπολογιστής που περιέχει εκατομμύρια εκτελέσιμα αντικείμενα, το καθένα με τη δική του μόνιμη αποθήκη δεδομένων. Τα smart contracts (και, κατ' επέκταση, οι DApps) εκτελούνται από την εικονική μηχανή του Ethereum (Ethereum Virtual Machine ή EVM). Η EVM αποτελεί μία quasi\footnote{"Quasi" ("σχεδόν") επειδή όλες οι διαδικασίες εκτέλεσης περιορίζονται σε έναν πεπερασμένο αριθμό υπολογιστικών βημάτων από την ποσότητα gas που είναι διαθέσιμη για οποιαδήποτε εκτέλεση ενός smart contract.}–Turing-complete μηχανή καταστάσεων αρχιτεκτονικής βασισμένης σε στοίβα (stack-based architecture). Σε υψηλό επίπεδο, η EVM μπορεί να θεωρηθεί ως ένας παγκόσμιος αποκεντρωμένος υπολογιστής που περιέχει εκατομμύρια εκτελέσιμα αντικείμενα, το καθένα με τη δική του μόνιμη αποθήκη δεδομένων.

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

@ -1,9 +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, είναι να αποτελέσει μία αυτόνομη κοινωνική πλατφόρμα, που θα κατοχυρώνει στους χρήστες της ελευθερία του λόγου και πλήρη κυριότητα επί των δεδομένων τους. Επιπλέον, θα παρέχει τη δυνατότητα διενέργειας αυθεντικών, ανώνυμων ψηφοφοριών, κάτι που θα την καθιστά ένα αξιόπιστο δημοκρατικό βήμα για τη λήψη αποφάσεων εντός των αυτοδιαχειριζόμενων κοινοτήτων της.

5
chapters/3.application-design/3.2.technology-stack.tex

@ -3,13 +3,14 @@
Ξεκινώντας τη σχεδίαση της πλατφόρμας, πραγματοποιήθηκε έρευνα για την επιλογή της τεχνολογικής της στοίβας (technology stack). Αυτή αποφασίστηκε να ακολουθήσει μία προσαρμοσμένη για τα δεδομένα μορφή τριμερούς διάταξης\footnote{Η τριμερής διάταξη (three-tier architecture) διαχωρίζει μία εφαρμογή σε τρία ανεξάρτητα λειτουργικά επίπεδα και αποτελεί την κυρίαρχη επιλογή για διατάξεις παραδοσιακών εφαρμογών πελάτη-εξυπηρετητή.} και να χωριστεί σε τρία λογικά επίπεδα (tiers): Ξεκινώντας τη σχεδίαση της πλατφόρμας, πραγματοποιήθηκε έρευνα για την επιλογή της τεχνολογικής της στοίβας (technology stack). Αυτή αποφασίστηκε να ακολουθήσει μία προσαρμοσμένη για τα δεδομένα μορφή τριμερούς διάταξης\footnote{Η τριμερής διάταξη (three-tier architecture) διαχωρίζει μία εφαρμογή σε τρία ανεξάρτητα λειτουργικά επίπεδα και αποτελεί την κυρίαρχη επιλογή για διατάξεις παραδοσιακών εφαρμογών πελάτη-εξυπηρετητή.} και να χωριστεί σε τρία λογικά επίπεδα (tiers):
\begin{enumerate} \begin{enumerate}
\item \textbf{Presentation tier}: Αποτελεί τη διεπαφή του χρήστη (user interface ή UI), μέσω της οποίας ο τελευταίος αλληλεπιδρά με την εφαρμογή. Για την εκπλήρωση των προδιαγραφών, το μοναδικό απαραίτητο χαρακτηριστικό αυτού του τμήματος είναι να μπορεί να εκτελείται αυτούσιο από τη συσκευή του τελικού χρήστη, δηλαδή να μην απαιτείται η ύπαρξη κάποιου εξυπηρετητή για τη λειτουργία του. Λαμβάνοντας, επιπροσθέτως, υπόψιν τις ανάγκες και τους περιορισμούς των λογισμικών των άλλων δύο επιπέδων, το παρόν κομμάτι αποφασίστηκε να σχεδιαστεί ως μία client-side web application σε HTML/CSS/JavaScript. \item \textbf{Presentation tier}: Αποτελεί τη διεπαφή του χρήστη (user interface ή UI), μέσω της οποίας ο τελευταίος αλληλεπιδρά με την εφαρμογή. Για την εκπλήρωση των προδιαγραφών, το μοναδικό απαραίτητο χαρακτηριστικό αυτού του τμήματος είναι να μπορεί να εκτελείται αυτούσιο από τη συσκευή του τελικού χρήστη, δηλαδή να μην απαιτείται η ύπαρξη κάποιου εξυπηρετητή για τη λειτουργία του. Λαμβάνοντας, επιπροσθέτως, υπόψιν τις ανάγκες και τους περιορισμούς των λογισμικών των άλλων δύο επιπέδων, το παρόν κομμάτι αποφασίστηκε να σχεδιαστεί ως μία client-side web application σε HTML, CSS και JavaScript.
\item \textbf{Application tier}: Πρόκειται για το επίπεδο που πραγματοποιεί την επεξεργασία (\textenglish{processing}) της εφαρμογής. Εδώ επιλέχθηκαν το blockchain και τα smart contracts, καθώς τα πλεονεκτήματά τους, όπως αυτά περιγράφηκαν στο κεφάλαιο \ref{chapter:2-theoretical-background}, αρμόζουν απόλυτα με τις ιδιαίτερες απαιτήσεις της εφαρμογής. Συγκεκριμένα, επιλέχθηκε η πλατφόρμα του Ethereum, καθώς αποτελεί τον πρωτοπόρο στο χώρο, διαθέτοντας την ισχυρότερη κοινότητα και την δυνατότητα δημιουργίας πλήρως λειτουργικών εφαρμογών. \item \textbf{Application tier}: Πρόκειται για το επίπεδο που πραγματοποιεί την επεξεργασία (\textenglish{processing}) της εφαρμογής. Εδώ επιλέχθηκαν το blockchain και τα smart contracts, καθώς τα πλεονεκτήματά τους, όπως αυτά περιγράφηκαν στο κεφάλαιο \ref{chapter:2-theoretical-background}, αρμόζουν απόλυτα με τις ιδιαίτερες απαιτήσεις της εφαρμογής. Συγκεκριμένα, επιλέχθηκε η πλατφόρμα του Ethereum, καθώς αποτελεί τον πρωτοπόρο στο χώρο, διαθέτοντας την ισχυρότερη κοινότητα και τη δυνατότητα δημιουργίας πλήρως λειτουργικών αποκεντρωμένων εφαρμογών.
\item \textbf{Data tier}: Το τμήμα αυτό είναι υπεύθυνο για την αποθήκευση του κύριου όγκου των δεδομένων (storage). Για την επίτευξη πλήρους αρχιτεκτονικής αποκέντρωσης των δεδομένων επιλέχθηκε το IPFS (βλ. ενότητα \ref{section:2-7-ipfs}), το οποίο διανέμει το περιεχόμενο της εφαρμογής στους peers που συμμετέχουν σε αυτήν, χωρίς να απαιτεί κάποιο κεντρικό σημείο. Έτσι, κάθε χρήστης θα έχει πλήρη κυριότητα επί των δεδομένων του, ενώ, επιπλέον, θα συμμετέχει στην πλατφόρμα διαμοιράζοντας τα δεδομένα άλλων χρηστών. \item \textbf{Data tier}: Το τμήμα αυτό είναι υπεύθυνο για την αποθήκευση του κύριου όγκου των δεδομένων (storage). Για την επίτευξη πλήρους αρχιτεκτονικής αποκέντρωσης των δεδομένων επιλέχθηκε το IPFS (βλ. ενότητα \ref{section:2-7-ipfs}), το οποίο διανέμει το περιεχόμενο της εφαρμογής στους peers που συμμετέχουν σε αυτήν, χωρίς να απαιτεί κάποιο κεντρικό σημείο. Έτσι, κάθε χρήστης θα έχει πλήρη κυριότητα επί των δεδομένων του, ενώ, επιπλέον, θα συμμετέχει στην πλατφόρμα διαμοιράζοντας τα δεδομένα άλλων χρηστών.
\end{enumerate} \end{enumerate}
\newpage
Τελικά, με τη διασύνδεση των προαναφερθέντων τεχνολογιών, προκύπτει σχηματικά η ακόλουθη διάταξη: Τελικά, με τη διασύνδεση των προαναφερθέντων τεχνολογιών, προκύπτει σχηματικά η ακόλουθη διάταξη:
\begin{figure}[H] \begin{figure}[H]

14
chapters/3.application-design/3.3.design-methodology.tex

@ -1,15 +1,15 @@
\section{Μεθοδολογία σχεδίασης} \label{section:3-3-design-methodology} \section{Μεθοδολογία σχεδίασης} \label{section:3-3-design-methodology}
Στον χώρο της τεχνολογίας λογισμικού υπάρχουν διάφορες μεθοδολογίες σχεδίασης οι οποίες έχουν μεταξύ τους κοινά στοιχεία. Αυτό καθιστά δύσκολο τον προσδιορισμό μίας μόνο μεθοδολογίας η οποία ακολουθείται πιστά σε κάθε έργο. Συνήθως, οι ομάδες που αναπτύσσουν το λογισμικό ακολουθούν μία μίξη από διάφορα εργαλεία, όπου αυτά κρίνονται βολικά για τους στόχους της ομάδας. % todo: need reference for this Στον χώρο της τεχνολογίας λογισμικού υπάρχουν διάφορες μεθοδολογίες σχεδίασης οι οποίες έχουν μεταξύ τους κοινά στοιχεία. Αυτό καθιστά δύσκολο τον προσδιορισμό μίας μόνο μεθοδολογίας η οποία να ακολουθείται πιστά σε κάθε έργο. Συνήθως, οι ομάδες που αναπτύσσουν το λογισμικό ακολουθούν μία μίξη από διάφορα εργαλεία, όπου αυτά κρίνονται βολικά για τους στόχους της ομάδας. % todo: need reference for this
Κατά την σχεδίαση και την υλοποίηση του κώδικα ακολουθήθηκαν διάφορες τεχνικές και μοτίβα ανάπτυξης. Κατά βάση χρησιμοποιήθηκαν Agile μέθοδοι όπως το Kanban και Scrum και, αργότερα στην ανάπτυξη, το DevOps μοντέλο για διαρκή ενσωμάτωση (Continuous Integration) και διαρκή εγκατάσταση (Continuous Deployment). Κατά την σχεδίαση και την υλοποίηση του κώδικα ακολουθήθηκαν διάφορες τεχνικές και μοτίβα ανάπτυξης. Κατά βάση χρησιμοποιήθηκαν Agile μέθοδοι όπως το Kanban και το Scrum και αργότερα στην ανάπτυξη το DevOps μοντέλο για διαρκή ενσωμάτωση (Continuous Integration) και διαρκή εγκατάσταση (Continuous Deployment).
Για την παρούσα εργασία, πραγματοποιήθηκε ανάλυση και σχεδιασμός των επιμέρους μονάδων εργασίας (tasks) πριν την έναρξη της διαδικασίας ανάπτυξης του κώδικα. Τα tasks που προδιαγράφηκαν ήταν συνήθως epics\footnote{Τα epics είναι μεγάλες μονάδες εργασίας οι οποίες αφορούν κάποιο βασικό χαρακτηριστικό. Ο διαχωρισμός τους σε επιμέρους tasks αναβάλλεται με σκοπό την καλύτερη κατανόηση των αναγκών τους.} τα οποία αργότερα χωρίστηκαν σε επιμέρους, μικρότερα tasks. Ορίστηκαν επίσης ορόσημα (milestones) τα οποία βοήθησαν ιδιαίτερα στην ιεράρχηση και προτεραιοποίηση των tasks. Για την παρούσα εργασία, πραγματοποιήθηκε ανάλυση και σχεδιασμός των επιμέρους μονάδων εργασίας (tasks) πριν την έναρξη της διαδικασίας ανάπτυξης του κώδικα. Τα task που προδιαγράφηκαν ήταν συνήθως epics\footnote{Τα epics είναι μεγάλες μονάδες εργασίας, οι οποίες αφορούν σε κάποιο βασικό χαρακτηριστικό. Ο διαχωρισμός τους σε επιμέρους task αναβάλλεται με σκοπό την καλύτερη κατανόηση των αναγκών τους.} τα οποία αργότερα χωρίστηκαν σε επιμέρους, μικρότερα task. Ορίστηκαν επίσης ορόσημα (milestones) τα οποία βοήθησαν ιδιαίτερα στην ιεράρχηση και προτεραιοποίηση των task.
Το Kanban είναι μία μέθοδος οργάνωσης έργων και οπτικοποίησης των μονάδων εργασίας (tasks) που απαιτούνται για την ολοκλήρωσή τους. Στο Kanban ορίζονται τα βασικά στάδια της ροής ενός task και χρησιμοποιούνται οπτικά μέσα ώστε να γίνει ιχνηλάτηση τόσο της συνολικής κατάστασης του έργου, όσο και συγκεκριμένων-μεμονωμένων tasks καθώς αυτά προοδεύουν. Για κάθε στάδιο ολοκλήρωσης ορίζεται μία ξεχωριστή ουρά εργασιών (στήλη), για παράδειγμα "σε αναμονή", "σε εξέλιξη", "ολοκληρωμένο". Χρησιμοποιούνται οπτικά σινιάλα (χρώματα, tags και άλλα) για τον διαχωρισμό και την γρήγορη κατανόηση των σημαντικότερων γνωρισμάτων των tasks, για παράδειγμα ξεχωριστό tag για κάθε υπηρεσία στην οποία αναφέρεται το task. Επίσης, ορίζονται όρια στον αριθμό των tasks που μπορούν να είναι ταυτόχρονα σε εξέλιξη. Το Kanban είναι μία μέθοδος οργάνωσης έργων και οπτικοποίησης των μονάδων εργασίας που απαιτούνται για την ολοκλήρωσή τους. Στο Kanban ορίζονται τα βασικά στάδια της ροής ενός task και χρησιμοποιούνται οπτικά μέσα, ώστε να γίνει ιχνηλάτηση τόσο της συνολικής κατάστασης του έργου, όσο και συγκεκριμένων-μεμονωμένων task καθώς αυτά προοδεύουν. Για κάθε στάδιο ολοκλήρωσης ορίζεται μία ξεχωριστή ουρά εργασιών (στήλη), για παράδειγμα "σε αναμονή", "σε εξέλιξη", "ολοκληρωμένο". Χρησιμοποιούνται οπτικά σινιάλα (χρώματα, tags και άλλα) για τον διαχωρισμό και την γρήγορη κατανόηση των σημαντικότερων γνωρισμάτων των task, για παράδειγμα ξεχωριστό tag για κάθε υπηρεσία στην οποία αναφέρεται το task. Επίσης, ορίζονται όρια στον αριθμό των task που μπορούν να είναι ταυτόχρονα σε εξέλιξη.
Μία άλλη Agile μέθοδος είναι το Scrum. Το Scrum χρησιμοποιεί και επεκτείνει το Kanban. Η βασικές διαφορές του με το Kanban είναι ότι στο Scrum υπάρχουν πιο αυστηρές διαδικασίες. Ορίζονται προγραμματιστικοί κύκλοι (sprints) οι οποίοι έχουν συγκεκριμένες ημερομηνίες έναρξης και λήξης και συγκεκριμένους στόχους οι οποίοι αντικατοπτρίζονται σε στόχους ολοκλήρωσης ορισμένων tasks. Οι ρόλοι είναι σαφέστεροι, με κάθε μέλος της ομάδας να αναλαμβάνει διαφορετικές ευθύνες στην οργάνωση και εκτέλεση. Για την διαδικασία ανάπτυξης, υπήρξε πολύ χρήσιμη η χρήση του Scrum σε περιόδους όπου ήταν αναγκαία η ταχύτατη ανάπτυξη καίριων μερών του συστήματος. Λόγω της αυστηρότητας που επιβάλλεται από αυτό, ειδικά σε ό,τι αφορά τις προθεσμίες ολοκλήρωσης των επιμέρους tasks αλλά και του συνολικού sprint. Μία άλλη Agile μέθοδος είναι το Scrum. Το Scrum χρησιμοποιεί και επεκτείνει το Kanban. Η βασικές διαφορές του με το Kanban είναι ότι στο Scrum υπάρχουν πιο αυστηρές διαδικασίες. Ορίζονται προγραμματιστικοί κύκλοι (sprints), οι οποίοι έχουν συγκεκριμένες ημερομηνίες έναρξης και λήξης και συγκεκριμένους στόχους, οι οποίοι αντικατοπτρίζονται σε στόχους ολοκλήρωσης ορισμένων task. Οι ρόλοι είναι σαφέστεροι, με κάθε μέλος της ομάδας να αναλαμβάνει διαφορετικές ευθύνες στην οργάνωση και εκτέλεση. Για τη διαδικασία ανάπτυξης, υπήρξε πολύ χρήσιμη η χρήση του Scrum σε περιόδους που ήταν αναγκαία η ταχύτατη ανάπτυξη καίριων μερών του συστήματος. Αυτό λόγω της αυστηρότητας που επιβάλλει, ειδικά σε ό,τι αφορά στις προθεσμίες ολοκλήρωσης τόσο των επιμέρους task, όσο και του συνολικού sprint.
Καθώς η αναπτυξιακή διαδικασία ωριμάζει και η πλατφόρμα αποτελεί ένα βιώσιμο προϊόν, είναι χρήσιμη η ύπαρξη ενός συστήματος που να διευκολύνει την άμεση δημιουργία και δημοσίευση των νεότερων εκδόσεων. Μερικές εξαιρετικές μέθοδοι για την απρόσκοπτη και αυτοματοποιημένη επίτευξη του στόχου αυτού ορίζονται από το DevOps. Με τον όρο DevOps (development operations) αναφέρεται μία κουλτούρα σχεδίασης και ανάπτυξης λογισμικού που ορίζει τους ρόλους, τις διαδικασίες και τεχνολογίες της με σκοπό την συνεχή δημιουργία αξίας για τους χρήστες. Το DevOps έχει πολύ στενή σχέση με το Agile και αποτελεί την συνέχιση της νοοτροπίας αυτής στον χώρο. Καθώς η αναπτυξιακή διαδικασία ωριμάζει και η πλατφόρμα μετατρέπεται σε βιώσιμο προϊόν, είναι χρήσιμη η ύπαρξη ενός συστήματος που να διευκολύνει τη δημιουργία και τη δημοσίευση καινούργιων εκδόσεων. Μερικές εξαιρετικές μέθοδοι για την απρόσκοπτη και αυτοματοποιημένη επίτευξη αυτού του στόχου ορίζονται από το DevOps. Με τον όρο DevOps (development operations) αναφέρεται μία κουλτούρα σχεδίασης και ανάπτυξης λογισμικού που ορίζει τους ρόλους, τις διαδικασίες και τις τεχνολογίες της, με σκοπό τη συνεχή δημιουργία αξίας για τους χρήστες. Το DevOps έχει πολύ στενή σχέση με το Agile και αποτελεί τη συνέχιση αυτής της νοοτροπίας στον χώρο.
Μία από τις πιο χρήσιμες πτυχές του DevOps, η οποία χρησιμοποιήθηκε στην διπλωματική, είναι το CI/CD το οποίο περιγράφει τις διαδικασίες αυτοματοποίησης των εργασιών ενσωμάτωσης (integration), ελέγχου (testing), παράδοσης (delivery) και εγκατάστασης (deployment) του προϊόντος. Μέσω των διαδικασιών αυτών αφαιρείται η ανάγκη ανθρώπινης αλληλεπίδρασης για την ολοκλήρωση των σταδίων αυτών, ενώ επιτυγχάνεται η διαρκής και απρόσκοπτη διάθεση της τελευταίες έκδοσης της πλατφόρμας στους χρήστες. Ορίζονται επίσης διαδικασίες δημιουργίας περιβάλλοντος ελέγχου (staging deploys) το οποίο αποτελεί σημαντικό βοήθημα στον έγκαιρο εντοπισμό λαθών του κώδικα. Μία από τις πιο χρήσιμες πτυχές του DevOps, η οποία χρησιμοποιήθηκε στην διπλωματική, είναι το CI/CD, το οποίο περιγράφει τις διαδικασίες αυτοματοποίησης των εργασιών ενσωμάτωσης (integration), ελέγχου (testing), παράδοσης (delivery) και εγκατάστασης (deployment) του προϊόντος. Μέσω του CI/CD αφαιρείται η ανάγκη ανθρώπινης αλληλεπίδρασης για την ολοκλήρωση αυτών των σταδίων, ενώ επιτυγχάνεται η διαρκής και απρόσκοπτη διάθεση της τελευταίες έκδοσης της πλατφόρμας στους χρήστες. Ορίζονται επίσης διαδικασίες δημιουργίας περιβάλλοντος ελέγχου (staging deploys), κάτι που αποτελεί σημαντικό βοήθημα στον έγκαιρο εντοπισμό λαθών του κώδικα.

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

@ -1,6 +1,8 @@
\section{Κατηγορίες χρηστών} \label{section:3-4-user-categories} \section{Κατηγορίες χρηστών} \label{section:3-4-user-categories}
Οι χρήστες (actors) της πλατφόρμας χωρίζονται σε πρωτεύοντες ή ενεργούς και δευτερεύοντες ή παθητικούς. Πρωτεύοντες χρήστες είναι εκείνοι που εκκινούν διεργασίες στο σύστημα. Δευτερεύοντες είναι οι χρήστες με τους οποίους αλληλεπιδρά το σύστημα, αλλά οι ίδιοι δεν εκκινούν διεργασίες σε αυτό. Συνολικά οι χρήστες που συμμετέχουν στο σύστημα είναι οι: Οι χρήστες (actors) της πλατφόρμας χωρίζονται σε πρωτεύοντες ή ενεργούς και δευτερεύοντες ή παθητικούς. Πρωτεύοντες χρήστες είναι εκείνοι που εκκινούν διεργασίες στο σύστημα. Δευτερεύοντες είναι οι χρήστες με τους οποίους αλληλεπιδρά το σύστημα, αλλά οι ίδιοι δεν εκκινούν διεργασίες σε αυτό.
Συνολικά οι χρήστες που συμμετέχουν στο σύστημα είναι οι εξής:
\begin{itemize} \begin{itemize}
\item Επισκέπτες \item Επισκέπτες
@ -10,19 +12,19 @@
\subsection{Ενεργοί χρήστες} \subsection{Ενεργοί χρήστες}
Οι ενεργοί χρήστες στο σύστημα είναι οι επισκέπτες και τα εγγεγραμμένα μέλη. Στην κατηγορία των ενεργών χρηστών του συστήματος περιλαμβάνονται οι επισκέπτες και τα εγγεγραμμένα μέλη.
Όλοι οι χρήστες στο σύστημα είναι αρχικά επισκέπτες. Οι επισκέπτες έχουν τη δυνατότητα να βλέπουν το περιεχόμενο της κοινότητας, αλλά δε μπορούν να συμμετέχουν δημιουργώντας νέο περιεχόμενο (δημοσιεύοντας νέα θέματα ή μηνύματα). Επίσης, δε μπορούν να συμμετέχουν στις ψηφοφορίες της κοινότητας ή να ψηφίσουν τα μηνύματα. Όλοι οι χρήστες στο σύστημα είναι αρχικά επισκέπτες. Οι επισκέπτες έχουν τη δυνατότητα να βλέπουν το περιεχόμενο της κοινότητας, αλλά δε μπορούν να συμμετέχουν δημιουργώντας νέο περιεχόμενο (δημοσιεύοντας νέα θέματα ή μηνύματα). Επίσης, δε μπορούν να συμμετέχουν στις ψηφοφορίες των κοινοτήτων ή να ψηφίσουν τα μηνύματα.
Όταν ένας επισκέπτης εγγράφεται στο σύστημα, αποκτά έναν μοναδικό, αύξοντα αριθμό χρήστη και αποτελεί πλέον εγγεγραμμένο μέλος της κοινότητας. Τα εγγεγραμμένα μέλη έχουν τα δικαιώματα των επισκεπτών και μπορούν επιπλέον να προσθέσουν περιεχόμενο στην πλατφόρμα μέσω της δημιουργίας νέων θεμάτων, της δημοσίευσης μηνυμάτων και της ψήφισης στις ψηφοφορίες στις οποίες έχουν δικαίωμα. Όταν ένας επισκέπτης εγγράφεται στο σύστημα, αποκτά έναν μοναδικό, αύξοντα αριθμό χρήστη και αποτελεί πλέον εγγεγραμμένο μέλος της κοινότητας. Τα εγγεγραμμένα μέλη έχουν τα δικαιώματα των επισκεπτών και μπορούν επιπλέον να προσθέσουν περιεχόμενο στην πλατφόρμα μέσω της δημιουργίας νέων θεμάτων, της δημοσίευσης μηνυμάτων και της ψήφισης στις ψηφοφορίες στις οποίες έχουν δικαίωμα.
\subsection{Παθητικοί χρήστες} \subsection{Παθητικοί χρήστες}
Παθητικοί χρήστες τους συστήματος είναι τα συμβόλαια των κοινοτήτων. Τα συμβόλαια αυτά δεν εκκινούν διεργασίες στο σύστημα και δεν αλληλεπιδρούν με αυτό άμεσα. Αποτελούν αυτόνομες εξωτερικές οντότητες, οι οποίες ορίζουν τους χρήστες κοινοτήτων μέσω της διάθεσης αναγνωριστικών token στα μέλη τους. Συγκεκριμένα, μέσω του διαμοιρασμού των token, καθορίζουν ποιοι χρήστες της πλατφόρμας έχουν δικαίωμα ψήφου στις ψηφοφορίες που αφορούν την κοινότητα. Παθητικοί χρήστες τους συστήματος είναι τα συμβόλαια των κοινοτήτων. Τα συμβόλαια αυτά δεν εκκινούν διεργασίες στο σύστημα και δεν αλληλεπιδρούν με αυτό άμεσα. Αποτελούν αυτόνομες εξωτερικές οντότητες, οι οποίες ορίζουν τα μέλη των κοινοτήτων τους, διαμοιράζοντάς τους αναγνωριστικά token. Αυτά τα token παρέχουν στους χρήστες το δικαίωμα δημιουργίας και συμμετοχής σε ψηφοφορίες για την εκάστοτε κοινότητα.
\subsection{Σύνοψη χρηστών} \subsection{Σύνοψη χρηστών}
Συμπερασματικά προκύπτουν δύο διακριτές κατηγορίες ενεργών χρηστών με ξεχωριστά δικαιώματα όπως φαίνεται στο παρακάτω σχήμα: Συμπερασματικά προκύπτουν δύο διακριτές κατηγορίες ενεργών χρηστών με ξεχωριστά δικαιώματα όπως φαίνεται στον παρακάτω πίνακα:
\begin{threeparttable}[H] \begin{threeparttable}[H]
\begin{center} \begin{center}

40
chapters/3.application-design/3.5.software-requirements.tex

@ -8,21 +8,21 @@
\sysReqItem \sysReqItem
{\label{srs:functional-srs-sign-up}} {\label{srs:functional-srs-sign-up}}
{Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή με τον Ethereum λογαριασμό του.} {Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή με τον Ethereum λογαριασμό του.}
{Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή, πατώντας το κουμπί "Sign Up" και συμπληρώνοντας τα απαραίτητα πεδία σύμφωνα με τις οδηγίες. Το πεδίο "Username" είναι υποχρεωτικό να συμπληρωθεί με το επιθυμητό username, το οποίο ορίζεται με μοναδικό τρόπο. Σε περίπτωση που ο χρήστης εισάγει μη διαθέσιμο Username, το σύστημα θα πρέπει να μην επιτρέπει στον χρήστη να συνεχίσει και να προβάλει αντίστοιχο μήνυμα λάθους. Επιπλέον, υπάρχουν τα προαιρετικά πεδία "Profile picture URL" και "Location", στα οποία ο χρήστης μπορεί να εισάγει μία εικόνα προφίλ και την τοποθεσία του αντίστοιχα.} {Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή, πατώντας το κουμπί "Sign Up" και συμπληρώνοντας τα απαραίτητα πεδία σύμφωνα με τις οδηγίες. Το πεδίο "Username" είναι υποχρεωτικό να συμπληρωθεί με το επιθυμητό όνομα χρήστη και ορίζεται με μοναδικό τρόπο. Σε περίπτωση που ο χρήστης εισάγει μη διαθέσιμο Username, το σύστημα θα πρέπει να μην του επιτρέπει να συνεχίσει και να προβάλει αντίστοιχο μήνυμα λάθους. Επιπλέον, υπάρχουν τα προαιρετικά πεδία "Profile picture URL" και "Location", στα οποία ο χρήστης μπορεί να εισάγει αντίστοιχα μία εικόνα προφίλ και την τοποθεσία του.}
{5}{Η απαίτηση είναι ύψιστης προτεραιότητας για τους επισκέπτες, καθώς μόνο μέσω της εγγραφής μπορούν να χρησιμοποιήσουν τα υπόλοιπα χαρακτηριστικά της εφαρμογής (όπως φαίνεται στον πίνακα \ref{table:3-4-user-category-permissions}).} {5}{Η απαίτηση είναι ύψιστης προτεραιότητας για τους επισκέπτες, καθώς μόνο μέσω της εγγραφής μπορούν να χρησιμοποιήσουν τα υπόλοιπα χαρακτηριστικά της εφαρμογής (όπως φαίνεται στον πίνακα \ref{table:3-4-user-category-permissions}).}
{5}{Η απαίτηση είναι ύψιστης σημασίας για το σύστημα, επειδή επηρεάζει τη λειτουργικότητά του.} {5}{Η απαίτηση είναι ύψιστης σημασίας για το σύστημα, επειδή επηρεάζει τη λειτουργικότητά του.}
\sysReqItem \sysReqItem
{\label{srs:functional-srs-sign-in}} {\label{srs:functional-srs-sign-in}}
{Ο χρήστης πρέπει να μπορεί συνδέεται στην εφαρμογή, εφόσον είναι εγγεγραμμένος.} {Ο χρήστης πρέπει να μπορεί συνδέεται στην εφαρμογή, εφόσον είναι εγγεγραμμένος.}
{Το σύστημα πρέπει να διαπιστώνει αυτόματα εάν το τρέχον Ethereum address έχει λογαριασμό στην εφαρμογή και εάν ναι, να συνδέει να τον χρήστη, ανακτώντας το Username του από το blockchain και προβάλλοντας το στο μενού.} {Το σύστημα πρέπει να διαπιστώνει αυτόματα εάν το τρέχον Ethereum address έχει λογαριασμό στην εφαρμογή και, εάν ναι, να συνδέει να τον χρήστη, ανακτώντας το Username του από το blockchain και προβάλλοντας το στο μενού.}
{5}{Αυτή η απαίτηση είναι ύψιστης προτεραιότητας για τους χρήστες, καθώς μέσω της σύνδεσης ενεργοποιούνται τα χαρακτηριστικά της δημιουργίας θεμάτων και δημοσίευσης μηνυμάτων.} {5}{Αυτή η απαίτηση είναι ύψιστης προτεραιότητας για τους χρήστες, καθώς μέσω της σύνδεσης ενεργοποιούνται τα χαρακτηριστικά της δημιουργίας θεμάτων και δημοσίευσης μηνυμάτων.}
{5}{Η απαίτηση είναι ύψιστης σημασίας για το σύστημα, επειδή επηρεάζει τη λειτουργικότητά του.} {5}{Η απαίτηση είναι ύψιστης σημασίας για το σύστημα, επειδή επηρεάζει τη λειτουργικότητά του.}
\sysReqItem \sysReqItem
{\label{srs:functional-srs-create-user-databases}} {\label{srs:functional-srs-create-user-databases}}
{Το σύστημα πρέπει να δημιουργεί τις απαραίτητες βάσεις δεδομένων και να τις συγχρονίζει με το δίκτυο.} {Το σύστημα πρέπει να δημιουργεί τις απαραίτητες βάσεις δεδομένων και να τις συγχρονίζει με το δίκτυο.}
{Το σύστημα πρέπει να δημιουργεί τις απαραίτητες OrbitDB βάσεις δεδομένων, εάν αυτές δεν υπάρχουν ήδη τοπικά. Όταν ο χρήστης ξεκλειδώνει τον Ethereum λογαριασμό του, το σύστημα θα πρέπει να τον προτρέπει να υπογράψει με το ιδιωτικό του κλειδί τη συναλλαγή δημιουργίας της OrbitDB Identity του. Αυτή θα εξασφαλίζει τη γνησιότητα των βάσεών του και των δεδομένων που εκείνες θα περιέχουν. Επιπλέον, τοπικές βάσεις δεδομένων θα πρέπει να συγχρονίζονται με τις βάσεις άλλων IPFS κόμβων και να διατηρούνται ενημερωμένες.} {Το σύστημα πρέπει να δημιουργεί τις απαραίτητες OrbitDB βάσεις δεδομένων, εάν αυτές δεν υπάρχουν ήδη τοπικά. Όταν ο χρήστης ξεκλειδώνει τον Ethereum λογαριασμό του, το σύστημα θα πρέπει να τον προτρέπει να υπογράψει με το ιδιωτικό του κλειδί τη συναλλαγή δημιουργίας της OrbitDB Identity του. Αυτή θα εξασφαλίζει τη γνησιότητα των βάσεών του και των δεδομένων που εκείνες θα περιέχουν. Επιπλέον, οι τοπικές βάσεις δεδομένων θα πρέπει να συγχρονίζονται με τις βάσεις άλλων IPFS κόμβων και να διατηρούνται ενημερωμένες.}
{5}{Η απαίτηση αυτή είναι ύψιστης σημασίας για τους χρήστες, καθώς η πλειοψηφία των δεδομένων της εφαρμογής διατηρούνται σε αυτές τις βάσεις.} {5}{Η απαίτηση αυτή είναι ύψιστης σημασίας για τους χρήστες, καθώς η πλειοψηφία των δεδομένων της εφαρμογής διατηρούνται σε αυτές τις βάσεις.}
{5}{Η παρούσα απαίτηση είναι ύψιστης σημασίας για το σύστημα, καθώς οι περισσότερες θεμελιώδεις λειτουργίες της εφαρμογής προϋποθέτουν την αποθήκευση δεδομένων σε OrbitDB βάσεις.} {5}{Η παρούσα απαίτηση είναι ύψιστης σημασίας για το σύστημα, καθώς οι περισσότερες θεμελιώδεις λειτουργίες της εφαρμογής προϋποθέτουν την αποθήκευση δεδομένων σε OrbitDB βάσεις.}
@ -36,9 +36,9 @@
\sysReqItem \sysReqItem
{\label{srs:functional-srs-browse-community-topics}} {\label{srs:functional-srs-browse-community-topics}}
{Ο χρήστης πρέπει να μπορεί να περιηγείται στα θέματα μίας κοινότητας.} {Ο χρήστης πρέπει να μπορεί να περιηγείται στα θέματα μίας κοινότητας.}
{Το σύστημα πρέπει να μπορεί να προβάλλει τα δημιουργημένα θέματα μίας κοινότητας στην αρχική οθόνη της. Ο χρήστης πρέπει να μπορεί να περιηγείται σε αυτά πατώντας πάνω τους και, έπειτα, χρησιμοποιώντας τα βέλη πλοήγησης, να περιηγηθεί στο ιστορικό των μηνυμάτων του θέματος.} {Το σύστημα πρέπει να μπορεί να προβάλλει τα δημιουργημένα θέματα μίας κοινότητας στην αρχική της οθόνη. Ο χρήστης πρέπει να μπορεί να περιηγείται σε αυτά πατώντας πάνω τους και, έπειτα, χρησιμοποιώντας τα βέλη πλοήγησης, να περιηγηθεί στο ιστορικό των μηνυμάτων του θέματος.}
{5}{Η απαίτηση αυτή είναι υψηλής σημασίας, αφού επιτρέπει στους επισκέπτες να έχουν πρόσβαση στο δημοσιευμένο υλικό της πλατφόρμας.} {5}{Η απαίτηση αυτή είναι υψηλής σημασίας, αφού επιτρέπει στους επισκέπτες να έχουν πρόσβαση στο δημοσιευμένο υλικό της πλατφόρμας.}
{5}{Πρόκετια για απαίτηση υψηλής σημασίας, επειδή αποτελεί βασικό χαρακτηριστικό για τη χρηστικότητα της πλατφόρμας.} {5}{Πρόκειται για απαίτηση υψηλής σημασίας, επειδή αποτελεί βασικό χαρακτηριστικό για τη χρηστικότητα της πλατφόρμας.}
\sysReqItem \sysReqItem
{\label{srs:functional-srs-create-post}} {\label{srs:functional-srs-create-post}}
@ -49,8 +49,8 @@
\sysReqItem \sysReqItem
{\label{srs:functional-srs-modify-post}} {\label{srs:functional-srs-modify-post}}
{Ο χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του.} {Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του.}
{Ο χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του. Αυτό το επιτυγχάνει επιλέγοντας το κουμπί επεξεργασίας στο εκάστοτε μήνυμα, πραγματοποιώντας τις επιθυμητές τροποποιήσεις και πατώντας το κουμπί επιβεβαίωσης. Στη συνέχεια, το σύστημα τροποποιεί το περιεχόμενο του μηνύματος στη βάση δεδομένων του χρήστη. Σε περίπτωση που ο χρήστης αλλάξει γνώμη κατά τη διάρκεια της διαδικασίας της επεξεργασίας, μπορεί να πατήσει το κουμπί ακύρωσης και να αναιρέσει τις αλλαγές που πραγματοποίησε.} {Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του. Αυτό το επιτυγχάνει επιλέγοντας το κουμπί επεξεργασίας στο εκάστοτε μήνυμα, πραγματοποιώντας τις επιθυμητές τροποποιήσεις και πατώντας το κουμπί επιβεβαίωσης. Στη συνέχεια, το σύστημα τροποποιεί το περιεχόμενο του μηνύματος στη βάση δεδομένων του χρήστη. Σε περίπτωση που ο χρήστης αλλάξει γνώμη κατά τη διάρκεια της διαδικασίας της επεξεργασίας, μπορεί να πατήσει το κουμπί ακύρωσης και να αναιρέσει τις αλλαγές που πραγματοποίησε.}
{4}{Η απαίτηση αυτή αποτελεί σημαντικό χαρακτηριστικό, καθώς παρέχει στους χρήστες άμεσο έλεγχο επί των δεδομένων τους.} {4}{Η απαίτηση αυτή αποτελεί σημαντικό χαρακτηριστικό, καθώς παρέχει στους χρήστες άμεσο έλεγχο επί των δεδομένων τους.}
{3}{Αυτή η απαίτηση είναι μέτριας σημαντικότητας για το σύστημα, επειδή αυτό θα μπορούσε να είναι λειτουργικό χωρίς το χαρακτηριστικό της επεξεργασίας μηνυμάτων.} {3}{Αυτή η απαίτηση είναι μέτριας σημαντικότητας για το σύστημα, επειδή αυτό θα μπορούσε να είναι λειτουργικό χωρίς το χαρακτηριστικό της επεξεργασίας μηνυμάτων.}
@ -84,15 +84,15 @@
\sysReqItem \sysReqItem
{\label{srs:functional-srs-create-communities}} {\label{srs:functional-srs-create-communities}}
{Ο χρήστης πρέπει να μπορεί να δημιουργεί κοινότητες.} {Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί κοινότητες.}
{Ο χρήστης πρέπει να μπορεί να δημιουργεί κοινότητες, πατώντας το κουμπί "Create community" και συμπληρώνοντας τα απαραίτητα πεδία.} {Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί κοινότητες, πατώντας το κουμπί "Create community" και συμπληρώνοντας τα απαραίτητα πεδία.}
{4}{Η απαίτηση είναι μεγάλης σημασίας για τους χρήστες, καθώς παρέχει την ευελιξία της δημιουργίας κοινοτήτων.} {4}{Η απαίτηση είναι μεγάλης σημασίας για τους χρήστες, καθώς παρέχει την ευελιξία της δημιουργίας κοινοτήτων.}
{4}{Πρόκειται για απαίτηση μεγάλης σημασίας για την πλατφόρμα, επειδή έτσι γενικεύει τη χρήση της σε περισσότερες κοινότητες, προσελκύοντας μεγαλύτερο αριθμό χρηστών.} {4}{Πρόκειται για απαίτηση μεγάλης σημασίας για την πλατφόρμα, επειδή έτσι γενικεύει τη χρήση της σε περισσότερες κοινότητες, προσελκύοντας μεγαλύτερο αριθμό χρηστών.}
\sysReqItem \sysReqItem
{\label{srs:functional-srs-assign-community-contract}} {\label{srs:functional-srs-assign-community-contract}}
{Κατά τη δημιουργία κοινότητας, ο χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα tokens για αυτήν.} {Κατά τη δημιουργία κοινότητας, ο εγγεγραμμένος χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα token για αυτήν.}
{Κατά τη δημιουργία κοινότητας, ο χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα tokens για αυτήν. Τα tokens αυτά θα διαμοιράζονται με τον τρόπο που επιθυμεί η κοινότητα και θα είναι εκείνα τα οποία θα καθορίζουν τους έγκυρους ψηφοφόρους της.} {Κατά τη δημιουργία κοινότητας, ο εγγεγραμμένος χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα token για αυτήν. Τα token αυτά θα διαμοιράζονται με τον τρόπο που επιθυμεί η κοινότητα και θα είναι εκείνα τα οποία θα καθορίζουν τους έγκυρους ψηφοφόρους της.}
{4}{Αυτή η απαίτηση είναι μεγάλης σημασίας, καθώς παρέχει στις κοινότητες τη δυνατότητα διενέργειας επιβεβαιώσιμων ανώνυμων ψηφοφοριών.} {4}{Αυτή η απαίτηση είναι μεγάλης σημασίας, καθώς παρέχει στις κοινότητες τη δυνατότητα διενέργειας επιβεβαιώσιμων ανώνυμων ψηφοφοριών.}
{4}{Η απαίτηση είναι μεγάλης σημασίας για το σύστημα, διότι παρέχει στις κοινότητες την απαιτούμενη αυτονομία στον ορισμό των δημοκρατικών διαδικασιών τους.} {4}{Η απαίτηση είναι μεγάλης σημασίας για το σύστημα, διότι παρέχει στις κοινότητες την απαιτούμενη αυτονομία στον ορισμό των δημοκρατικών διαδικασιών τους.}
\end{enumerate} \end{enumerate}
@ -103,21 +103,21 @@
\sysReqItem \sysReqItem
{\label{srs:non-functional-srs-maximum-decentraliztion}} {\label{srs:non-functional-srs-maximum-decentraliztion}}
{Η πλατφόρμα πρέπει να είναι κατά το δυνατόν αρχιτεκτονικά αποκεντρωμένη.} {Η πλατφόρμα πρέπει να είναι κατά το δυνατόν αρχιτεκτονικά αποκεντρωμένη.}
{Οι τεχνολογίες στις οποίες βασίζεται η πλατφόρμα πρέπει ιδανικά να μη δημιουργούν κεντρικά σημεία. Επιπλέον, ο κώδικας και η δημόσια διάθεση του πρέπει να γίνονται με αποκεντρωμένο τρόπο.} {Οι τεχνολογίες στις οποίες βασίζεται η πλατφόρμα πρέπει ιδανικά να μη δημιουργούν κεντρικά σημεία. Επιπλέον, η εφαρμογή και ο κώδικάς της πρέπει να διατίθενται δημόσια με αποκεντρωμένο τρόπο.}
{5}{Η αρχιτεκτονική αποκέντρωση της πλατφόρμας αποτελεί απαίτηση ύψιστης προτεραιότητας για τον χρήστη, καθώς διασφαλίζει την πολιτική αποκέντρωση και, έτσι, τους κύριους στόχους που έχουν οριστεί.} {5}{Η αρχιτεκτονική αποκέντρωση της πλατφόρμας αποτελεί απαίτηση ύψιστης προτεραιότητας για τον χρήστη, καθώς διασφαλίζει την πολιτική αποκέντρωση και, έτσι, τους κύριους στόχους που έχουν οριστεί.}
{5}{Η αρχιτεκτονική αποκέντρωση της πλατφόρμας αποτελεί, απαίτηση ύψιστης σημασίας για το σύστημα, καθώς καθιστά το ίδιο ασφαλές σε επιθέσεις και τα δεδομένα μόνιμα διαθέσιμα στους χρήστες.} {5}{Η αρχιτεκτονική αποκέντρωση της πλατφόρμας αποτελεί, απαίτηση ύψιστης σημασίας για το σύστημα, καθώς καθιστά το ίδιο ασφαλές σε επιθέσεις και τα δεδομένα μόνιμα διαθέσιμα στους χρήστες.}
\sysReqItem \sysReqItem
{\label{srs:non-functional-srs-minimize-fees}} {\label{srs:non-functional-srs-minimize-fees}}
{Τα fees για τη χρήση του Ethereum blockchain πρέπει να ελαχιστοποιούνται.} {Τα fee για τη χρήση του Ethereum blockchain πρέπει να ελαχιστοποιούνται.}
{Τα τέλη συναλλαγών που πρέπει να καταβάλλονται για τη χρήση του Ethereum blockchain εξαρτώνται άμεσα τόσο από τον όγκο των δεδομένων προς αποθήκευση, όσο και από τους κύκλους επεξεργασίας των smart contracts της εφαρμογής. Ως προς τα δεδομένα, οι προγραμματιστές θα πρέπει να μεριμνούν ώστε ο κύριος όγκος τους να αποθηκεύεται επί του IPFS, ενώ επί του blockchain να αποθηκεύονται μόνο όσα πραγματικά χρειάζονται. Ως προς την απαιτούμενη επεξεργαστική ισχύ, πρέπει να βελτιστοποιείται ο κώδικας των smart contracts, έτσι ώστε οι διάφορες λειτουργίες τους να εκτελούνται με τους λιγότερους δυνατούς επεξεργαστικούς κύκλους.} {Τα τέλη συναλλαγών που πρέπει να καταβάλλονται για τη χρήση του Ethereum blockchain εξαρτώνται άμεσα τόσο από τον όγκο των δεδομένων προς αποθήκευση, όσο και από τους κύκλους επεξεργασίας των smart contract της εφαρμογής. Ως προς τα δεδομένα, οι προγραμματιστές θα πρέπει να μεριμνούν ώστε ο κύριος όγκος τους να αποθηκεύεται επί του IPFS, ενώ επί του blockchain να αποθηκεύονται μόνο όσα πραγματικά χρειάζονται. Ως προς την απαιτούμενη επεξεργαστική ισχύ, πρέπει να βελτιστοποιείται ο κώδικας των smart contract, έτσι ώστε οι διάφορες λειτουργίες τους να εκτελούνται με τους λιγότερους δυνατούς επεξεργαστικούς κύκλους.}
{4}{Η απαίτηση αυτή είναι μεγάλης σημασίας για τους χρήστες καθώς ναι μεν δεν είναι απαραίτητη για τη χρήση της αλλά είναι ιδιαίτερα σημαντική για την ένταξη χρηστών με χαμηλότερες οικονομικές δυνατότητες.} {4}{Παρόλο που η απαίτηση δεν είναι απαραίτητη για τη χρήση της πλατφόρμας, είναι μεγάλης σημασίας για τους χρήστες, είναι ιδιαίτερα σημαντική για την ένταξη χρηστών με χαμηλότερες οικονομικές δυνατότητες.}
{5}{Η απαίτηση αυτή είναι μεγάλης σημασίας για το σύστημα διότι αποτελεί σημαντικό παράγοντα που επιδρά στην προσέλκυση και τη διατήρηση ενεργών χρηστών.} {5}{Η απαίτηση αυτή είναι μεγάλης σημασίας για το σύστημα, διότι αποτελεί σημαντικό παράγοντα που επιδρά στην προσέλκυση και τη διατήρηση ενεργών χρηστών.}
\sysReqItem \sysReqItem
{\label{srs:non-functional-srs-upgrade-contracts}} {\label{srs:non-functional-srs-upgrade-contracts}}
{Τα contracts της εφαρμογής πρέπει να είναι αναβαθμίσιμα.} {Τα contract της εφαρμογής πρέπει να είναι αναβαθμίσιμα.}
{Τα contracts της εφαρμογής πρέπει μπορούν να αναβαθμιστούν, έτσι ώστε να μπορούν να προστίθενται λειτουργίες και να διορθώνονται σφάλματα. Η αναβαθμισιμότητά τους θα πρέπει να επιτυγχάνεται με μεθόδους που να μην υπονομεύουν τη λειτουργικότητα των προηγούμενων εκδόσεων.} {Τα contract της εφαρμογής πρέπει μπορούν να αναβαθμιστούν, έτσι ώστε να μπορούν να προστίθενται λειτουργίες και να διορθώνονται σφάλματα. Η αναβαθμισιμότητά τους θα πρέπει να επιτυγχάνεται με μεθόδους που να μην υπονομεύουν τη λειτουργικότητα των προηγούμενων εκδόσεων.}
{2}{Η απαίτηση αυτή είναι χαμηλής σημασίας για τους χρήστες, καθώς αφορά την ανάπτυξη και όχι τη χρήση της.} {2}{Η απαίτηση αυτή είναι χαμηλής σημασίας για τους χρήστες, καθώς αφορά στην ανάπτυξη και όχι στη χρήση της.}
{5}{Η απαίτηση αυτή είναι υψηλής σημασίας για το σύστημα, επειδή προσφέρει τη δυνατότητα αποσφαλμάτωσης του, καθώς και την υλοποίηση νέων χαρακτηριστικών.} {5}{Η απαίτηση αυτή είναι υψηλής σημασίας για το σύστημα, επειδή προσφέρει τη δυνατότητα της περαιτέρω εξέλιξής του, μέσω της αποσφαλμάτωσης, καθώς και της υλοποίηση νέων χαρακτηριστικών.}
\end{enumerate} \end{enumerate}

4
chapters/3.application-design/3.6.use-cases.tex

@ -1,8 +1,8 @@
\section{Σενάρια χρήσης} \label{section:3-6-use-cases} \section{Σενάρια χρήσης} \label{section:3-6-use-cases}
Βασικό μέρος της σχεδίασης της πλατφόρμας ήταν η καταγραφή των απαιτήσεων η οποία έγινε στην προηγούμενη ενότητα (\ref{section:3-5-software-requirements}) καθώς και η σχεδίαση και ανάπτυξη των σεναρίων χρήσης. Τα σενάρια χρήσης αντιστοιχίζουν πιθανές ενέργειες των χρηστών με αποκρίσεις του συστήματος. Μέσω της αντιστοίχισης αυτής παρουσιάζεται η λειτουργικότητα του συστήματος και περιγράφονται τόσο οι λειτουργικές όσο και οι μη λειτουργικές απαιτήσεις του συστήματος. Βασικό μέρος της σχεδίασης της πλατφόρμας ήταν η καταγραφή των απαιτήσεων, η οποία έγινε στην προηγούμενη ενότητα (\ref{section:3-5-software-requirements}), καθώς και η σχεδίαση και ανάπτυξη των σεναρίων χρήσης. Τα σενάρια χρήσης αντιστοιχίζουν πιθανές ενέργειες των χρηστών με αποκρίσεις του συστήματος. Μέσω αυτής της αντιστοίχισης, παρουσιάζεται η λειτουργικότητα του συστήματος και περιγράφονται τόσο οι λειτουργικές, όσο και οι μη λειτουργικές του απαιτήσεις.
Παρατίθενται εδώ τα σενάρια χρήσης που δίνουν τις απαραίτητες πληροφορίες για την κατανόηση της λειτουργίας του συστήματος. Στις επόμενες υποενότητες παρατίθενται τα σενάρια χρήσης (<ΣΧ>) που δίνουν τις απαραίτητες πληροφορίες για την κατανόηση της λειτουργίας του συστήματος.
\input{chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up} \input{chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up}
\input{chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in} \input{chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in}

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

@ -3,15 +3,15 @@
% ===== ===== % ===== =====
\subsection{Σενάριο χρήσης 1: Εγγραφή χρήστη} \label{subsection:3-6-use-case-signup} \subsection{Σενάριο χρήσης 1: Εγγραφή χρήστη} \label{subsection:3-6-use-case-signup}
Το σενάριο χρήσης 1, <ΣΧ-1>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την εγγραφή ενός χρήστη στο σύστημα. Στους πίνακες \ref{table:3-6-use-case-sign-up} και \ref{table:3-6-use-case-sign-up-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-1> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-sign-up-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 1 (<ΣΧ-1>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την εγγραφή ενός χρήστη στο σύστημα. Στους πίνακες \ref{table:3-6-use-case-sign-up} και \ref{table:3-6-use-case-sign-up-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-1> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-sign-up-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Εγγράφομαι στο σύστημα} {Εγγράφομαι στο σύστημα}
{Στόχος του σεναρίου χρήσης είναι ο επισκέπτης να μπορεί να εγγραφεί στο σύστημα ως χρήστης.} {Στόχος του σεναρίου χρήσης είναι ο επισκέπτης να μπορεί να εγγραφεί στο σύστημα ως χρήστης.}
{\ref{srs:functional-srs-sign-up}, \ref{srs:functional-srs-create-user-databases}} {\ref{srs:functional-srs-sign-up}, \ref{srs:functional-srs-create-user-databases}}
{\ref{srs:non-functional-srs-minimize-fees}} {\ref{srs:non-functional-srs-minimize-fees}}
{Ο επισκέπτης πατάει το κουμπί εγγραφή.} {Ο επισκέπτης πατάει το κουμπί "Sign Up".}
{Ο επισκέπτης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.} {Ο επισκέπτης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.}
{Σενάριο χρήσης 1, εγγραφή χρήστη στο σύστημα.} {Σενάριο χρήσης 1, εγγραφή χρήστη στο σύστημα.}
{\label{table:3-6-use-case-sign-up}} {\label{table:3-6-use-case-sign-up}}
@ -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 - Βασική ροή}
@ -47,7 +47,7 @@
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
{1} {1}
{Τα στοιχεία χρήστη είναι λανθασμένα.} {Τα στοιχεία χρήστη είναι λανθασμένα.}
{Εφόσον ο χρήστης στη γραμμή 2 δεν συμπληρώσει το πεδίο ονόματος χρήστη ή συμπληρώσει ένα όνομα χρήστη το οποίο είναι ήδη σε χρήση στο σύστημα, το σύστημα πρέπει να επιστρέψει σχετικό μήνυμα σφάλματος.} {Εφόσον ο χρήστης στη γραμμή 2 δε συμπληρώσει το πεδίο ονόματος χρήστη ή συμπληρώσει ένα όνομα χρήστη το οποίο είναι ήδη σε χρήση στο σύστημα, το σύστημα πρέπει να επιστρέψει σχετικό μήνυμα σφάλματος.}
{ {
1 & - & Το σύστημα εμφανίζει μήνυμα σφάλματος. 1 & - & Το σύστημα εμφανίζει μήνυμα σφάλματος.
} }

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

@ -3,11 +3,11 @@
% ===== ===== % ===== =====
\subsection{Σενάριο χρήσης 10: Δημιουργία κοινότητας} \label{subsection:3-10-use-case-create-community} \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} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 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 \useCaseTable
{Δημιουργώ νέα κοινότητα} {Δημιουργώ νέα κοινότητα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει νέα κοινότητα.} {Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει μία νέα κοινότητα.}
{\ref{srs:functional-srs-create-communities}, \ref{srs:functional-srs-assign-community-contract}} {\ref{srs:functional-srs-create-communities}, \ref{srs:functional-srs-assign-community-contract}}
{\ref{srs:non-functional-srs-minimize-fees}} {\ref{srs:non-functional-srs-minimize-fees}}
{Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας.} {Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας.}
@ -19,11 +19,11 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει την φόρμα "Δημιουργία Κοινότητας". \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει τη φόρμα "Δημιουργία Κοινότητας". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex]
} }
{Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} {Το σύστημα μεταβαίνει στη σελίδα της νέας κοινότητας.}
{Σενάριο χρήσης 10 - Βασική ροή} {Σενάριο χρήσης 10 - Βασική ροή}
{\label{table:3-6-use-case-create-community-base-flow}} {\label{table:3-6-use-case-create-community-base-flow}}
@ -33,6 +33,7 @@
\caption{Σενάριο χρήσης 10 - Διάγραμμα βασικής ροής} \caption{Σενάριο χρήσης 10 - Διάγραμμα βασικής ροής}
\label{figure:3-6-use-case-create-community-base-flow-sequence-diagram} \label{figure:3-6-use-case-create-community-base-flow-sequence-diagram}
\end{figure} \end{figure}
\vspace{\baselineskip}
% ===== Alternate flow ===== % ===== Alternate flow =====
@ -41,13 +42,13 @@
\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}
{\label{table:3-6-use-case-create-community-alternate-flow-1}} {\label{table:3-6-use-case-create-community-alternate-flow-1}}

7
chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in.tex

@ -3,7 +3,7 @@
% ===== ===== % ===== =====
\subsection{Σενάριο χρήσης 2: Σύνδεση χρήστη} \label{subsection:3-6-use-case-signin} \subsection{Σενάριο χρήσης 2: Σύνδεση χρήστη} \label{subsection:3-6-use-case-signin}
Το σενάριο χρήσης 2, <ΣΧ-2>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την σύνδεση ενός χρήστη στο σύστημα. Στους πίνακες \ref{table:3-6-use-case-sign-in} και \ref{table:3-6-use-case-sign-in-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-2> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-sign-in-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 2 (<ΣΧ-2>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη σύνδεση ενός χρήστη στο σύστημα. Στους πίνακες \ref{table:3-6-use-case-sign-in} και \ref{table:3-6-use-case-sign-in-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-2> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-sign-in-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Συνδέομαι στο σύστημα} {Συνδέομαι στο σύστημα}
@ -11,7 +11,7 @@
{\ref{srs:functional-srs-sign-in}} {\ref{srs:functional-srs-sign-in}}
{-} {-}
{-} {-}
{Ο χρήστης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.} {Ο χρήστης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.}
{Σενάριο χρήσης 2, σύνδεση χρήστη στο σύστημα.} {Σενάριο χρήσης 2, σύνδεση χρήστη στο σύστημα.}
{\label{table:3-6-use-case-sign-in}} {\label{table:3-6-use-case-sign-in}}
@ -21,7 +21,7 @@
{ {
1 & - & Το σύστημα ανακτά τις πληροφορίες του χρήστη από το blockchain. \\ [0.5ex] 1 & - & Το σύστημα ανακτά τις πληροφορίες του χρήστη από το blockchain. \\ [0.5ex]
\midrule \midrule
2 & - & Το σύστημα δημιουργεί τις προσωπικές βάσεις βάσεις δεδομένων OrbitDb του χρήστη. \\ [0.5ex] 2 & - & Το σύστημα δημιουργεί τις προσωπικές OrbitDB βάσεις δεδομένων του χρήστη. \\ [0.5ex]
} }
{Το σύστημα παραμένει στην αρχική σελίδα της εφαρμογής.} {Το σύστημα παραμένει στην αρχική σελίδα της εφαρμογής.}
{Σενάριο χρήσης 2 - Βασική ροή} {Σενάριο χρήσης 2 - Βασική ροή}
@ -33,3 +33,4 @@
\caption{Σενάριο χρήσης 2 - Διάγραμμα βασικής ροής} \caption{Σενάριο χρήσης 2 - Διάγραμμα βασικής ροής}
\label{figure:3-6-use-case-sign-in-base-flow-sequence-diagram} \label{figure:3-6-use-case-sign-in-base-flow-sequence-diagram}
\end{figure} \end{figure}
\vspace{\baselineskip}

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

@ -1,9 +1,10 @@
% ===== ===== % ===== =====
% Use case 3 % Use case 3
% ===== ===== % ===== =====
\newpage
\subsection{Σενάριο χρήσης 3: Δημιουργία νέου θέματος} \label{subsection:3-6-use-case-create-topic} \subsection{Σενάριο χρήσης 3: Δημιουργία νέου θέματος} \label{subsection:3-6-use-case-create-topic}
Το σενάριο χρήσης 3, <ΣΧ-3>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την δημιουργία ενός θέματος. Στους πίνακες \ref{table:3-6-use-case-create-topic} και \ref{table:3-6-use-case-create-topic-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-3> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-create-topic-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 3 (<ΣΧ-3>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη δημιουργία ενός θέματος. Στους πίνακες \ref{table:3-6-use-case-create-topic} και \ref{table:3-6-use-case-create-topic-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-3> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-create-topic-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Δημιουργώ νέο θέμα} {Δημιουργώ νέο θέμα}
@ -19,13 +20,13 @@
\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]
} }
{Το σύστημα μεταβαίνει στην σελίδα του νέου θέματος.} {Το σύστημα μεταβαίνει στη σελίδα του νέου θέματος.}
{Σενάριο χρήσης 3 - Βασική ροή} {Σενάριο χρήσης 3 - Βασική ροή}
{\label{table:3-6-use-case-create-topic-base-flow}} {\label{table:3-6-use-case-create-topic-base-flow}}
@ -35,6 +36,7 @@
\caption{Σενάριο χρήσης 3 - Διάγραμμα βασικής ροής} \caption{Σενάριο χρήσης 3 - Διάγραμμα βασικής ροής}
\label{figure:3-6-use-case-create-topic-base-flow-sequence-diagram} \label{figure:3-6-use-case-create-topic-base-flow-sequence-diagram}
\end{figure} \end{figure}
\vspace{\baselineskip}
% ===== Alternate flow ===== % ===== Alternate flow =====
@ -43,15 +45,15 @@
\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 βάσεις του χρήστη.
} }
{Το σύστημα μεταβαίνει στην σελίδα του νέου θέματος.} {Το σύστημα μεταβαίνει στη σελίδα του νέου θέματος.}
{Σενάριο χρήσης 3 - Εναλλακτική ροή 1} {Σενάριο χρήσης 3 - Εναλλακτική ροή 1}
{\label{table:3-6-use-case-create-topic-alternate-flow-1}} {\label{table:3-6-use-case-create-topic-alternate-flow-1}}

15
chapters/3.application-design/3.6.use-cases/3.6.4.use-case-fetch-topic.tex

@ -1,9 +1,10 @@
% ===== ===== % ===== =====
% Use case 4 % Use case 4
% ===== ===== % ===== =====
\newpage
\subsection{Σενάριο χρήσης 4: Ανάκτηση θέματος} \label{subsection:3-6-use-case-fetch-topic} \subsection{Σενάριο χρήσης 4: Ανάκτηση θέματος} \label{subsection:3-6-use-case-fetch-topic}
Το σενάριο χρήσης 4, <ΣΧ-4>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ανάκτηση ενός θέματος. Στους πίνακες \ref{table:3-6-use-case-fetch-topic} και \ref{table:3-6-use-case-fetch-topic-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-4> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-fetch-topic-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 4 (<ΣΧ-4) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ανάκτηση ενός θέματος. Στους πίνακες \ref{table:3-6-use-case-fetch-topic} και \ref{table:3-6-use-case-fetch-topic-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-4> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-fetch-topic-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Ανακτώ ένα θέμα} {Ανακτώ ένα θέμα}
@ -11,7 +12,7 @@
{\ref{srs:functional-srs-browse-community-topics}} {\ref{srs:functional-srs-browse-community-topics}}
{-} {-}
{Ο επισκέπτης ή χρήστης πατάει σε ένα από τα θέματα.} {Ο επισκέπτης ή χρήστης πατάει σε ένα από τα θέματα.}
{Ο επισκέπτης ή χρήστης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.} {Ο επισκέπτης ή χρήστης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.}
{Σενάριο χρήσης 4, ανάκτηση θέματος.} {Σενάριο χρήσης 4, ανάκτηση θέματος.}
{\label{table:3-6-use-case-fetch-topic}} {\label{table:3-6-use-case-fetch-topic}}
@ -21,9 +22,9 @@
{ {
1 & Ο χρήστης πατάει σε ένα από τα θέματα της λίστας. & Το σύστημα ανακτά τις πληροφορίες του θέματος από το blockchain. \\ [0.5ex] 1 & Ο χρήστης πατάει σε ένα από τα θέματα της λίστας. & Το σύστημα ανακτά τις πληροφορίες του θέματος από το blockchain. \\ [0.5ex]
\midrule \midrule
2 & - & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές βάσεις OrbitDb των συγγραφέων. \\ [0.5ex] 2 & - & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές OrbitDB βάσεις των συγγραφέων. \\ [0.5ex]
} }
{Το σύστημα μεταβαίνει στην σελίδα του θέματος.} {Το σύστημα μεταβαίνει στη σελίδα του θέματος.}
{Σενάριο χρήσης 4 - Βασική ροή} {Σενάριο χρήσης 4 - Βασική ροή}
{\label{table:3-6-use-case-fetch-topic-base-flow}} {\label{table:3-6-use-case-fetch-topic-base-flow}}
@ -35,7 +36,7 @@
\end{figure} \end{figure}
% ===== Alternate flow ===== % ===== Alternate flow =====
\newpage
Το <ΣΧ-4> περιέχει επίσης μία εναλλακτική ροή που μπορεί να προκύψει βάσει των επιλογών του χρήστη και η οποία περιγράφεται στον πίνακα \ref{table:3-6-use-case-fetch-topic-alternate-flow-1}. Η εναλλακτική ροή 1 φαίνεται επίσης στο σχήμα \ref{figure:3-6-use-case-fetch-topic-alternate-flow-1-sequence-diagram} όπου παρουσιάζεται το διάγραμμα ροής της. Το <ΣΧ-4> περιέχει επίσης μία εναλλακτική ροή που μπορεί να προκύψει βάσει των επιλογών του χρήστη και η οποία περιγράφεται στον πίνακα \ref{table:3-6-use-case-fetch-topic-alternate-flow-1}. Η εναλλακτική ροή 1 φαίνεται επίσης στο σχήμα \ref{figure:3-6-use-case-fetch-topic-alternate-flow-1-sequence-diagram} όπου παρουσιάζεται το διάγραμμα ροής της.
\useCaseAlternateFlowTable \useCaseAlternateFlowTable
@ -43,9 +44,9 @@
{Το θέμα περιέχει ψηφοφορία.} {Το θέμα περιέχει ψηφοφορία.}
{Εφόσον το θέμα που ανακτήθηκε στη γραμμή 1 της Βασικής Ροής περιέχει ψηφοφορία ανακτώνται οι πληροφορίες της.} {Εφόσον το θέμα που ανακτήθηκε στη γραμμή 1 της Βασικής Ροής περιέχει ψηφοφορία ανακτώνται οι πληροφορίες της.}
{ {
1 & - & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές βάσεις OrbitDb των συγγραφέων. \\ [0.5ex] 1 & - & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές OrbitDB βάσεις των συγγραφέων. \\ [0.5ex]
2 & - & Το σύστημα ανακτά την ψηφοφορία από το blockchain. \\ [0.5ex] 2 & - & Το σύστημα ανακτά την ψηφοφορία από το blockchain. \\ [0.5ex]
3 & - & Το σύστημα ανακτά τις πληροφορίες της ψηφοφορίας αντιγράφοντας την προσωπική βάση OrbitDb του συγγραφέα. \\ [0.5ex] 3 & - & Το σύστημα ανακτά τις πληροφορίες της ψηφοφορίας αντιγράφοντας την προσωπική OrbitDB βάση του συγγραφέα. \\ [0.5ex]
4 & - & Το σύστημα επιβεβαιώνει τις πληροφορίες της ψηφοφορίας με βάση το hash που έχει ανακτηθεί από το blockchain. \\ [0.5ex] 4 & - & Το σύστημα επιβεβαιώνει τις πληροφορίες της ψηφοφορίας με βάση το hash που έχει ανακτηθεί από το blockchain. \\ [0.5ex]
} }
{Το σενάριο χρήσης τερματίζεται.} {Το σενάριο χρήσης τερματίζεται.}

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

@ -1,9 +1,10 @@
% ===== ===== % ===== =====
% Use case 5 % Use case 5
% ===== ===== % ===== =====
\newpage
\subsection{Σενάριο χρήσης 5: Δημιουργία νέου μηνύματος} \label{subsection:3-6-use-case-create-post} \subsection{Σενάριο χρήσης 5: Δημιουργία νέου μηνύματος} \label{subsection:3-6-use-case-create-post}
Το σενάριο χρήσης 5, <ΣΧ-5>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την δημιουργία ενός μηνύματος. Στους πίνακες \ref{table:3-6-use-case-create-post} και \ref{table:3-6-use-case-create-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-5> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-create-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 5 (<ΣΧ-5>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη δημιουργία ενός μηνύματος. Στους πίνακες \ref{table:3-6-use-case-create-post} και \ref{table:3-6-use-case-create-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-5> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-create-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Δημιουργώ νέο μήνυμα} {Δημιουργώ νέο μήνυμα}
@ -11,7 +12,7 @@
{\ref{srs:functional-srs-create-post}} {\ref{srs:functional-srs-create-post}}
{\ref{srs:non-functional-srs-minimize-fees}} {\ref{srs:non-functional-srs-minimize-fees}}
{Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος.} {Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα ενός θέματος.}
{Σενάριο χρήσης 5, δημιουργία νέου μηνύματος.} {Σενάριο χρήσης 5, δημιουργία νέου μηνύματος.}
{\label{table:3-6-use-case-create-post}} {\label{table:3-6-use-case-create-post}}
@ -19,11 +20,11 @@
\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]
} }
{Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το νέο μήνυμα.} {Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το νέο μήνυμα.}
{Σενάριο χρήσης 5 - Βασική ροή} {Σενάριο χρήσης 5 - Βασική ροή}

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

@ -3,7 +3,7 @@
% ===== ===== % ===== =====
\subsection{Σενάριο χρήσης 6: Τροποποίηση μηνύματος} \label{subsection:3-6-use-case-modify-post} \subsection{Σενάριο χρήσης 6: Τροποποίηση μηνύματος} \label{subsection:3-6-use-case-modify-post}
Το σενάριο χρήσης 6, <ΣΧ-6>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη τροποποίηση ενός μηνύματος. Στους πίνακες \ref{table:3-6-use-case-modify-post} και \ref{table:3-6-use-case-modify-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-6> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-modify-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 6 (<ΣΧ-6>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την τροποποίηση ενός μηνύματος. Στους πίνακες \ref{table:3-6-use-case-modify-post} και \ref{table:3-6-use-case-modify-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-6> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-modify-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Τροποποιώ ένα μήνυμα} {Τροποποιώ ένα μήνυμα}
@ -11,7 +11,7 @@
{\ref{srs:functional-srs-modify-post}} {\ref{srs:functional-srs-modify-post}}
{-} {-}
{Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος.} {Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα του θέματος που περιέχει το μήνυμά του.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα του θέματος που περιέχει το μήνυμά του.}
{Σενάριο χρήσης 6, τροποποίηση μηνύματος.} {Σενάριο χρήσης 6, τροποποίηση μηνύματος.}
{\label{table:3-6-use-case-modify-post}} {\label{table:3-6-use-case-modify-post}}
@ -19,9 +19,9 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος. & Το σύστημα εμφανίζει την φόρμα "Τροποποίηση Μηνύματος". \\ [0.5ex] 1 & Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος. & Το σύστημα εμφανίζει τη φόρμα "Τροποποίηση Μηνύματος". \\ [0.5ex]
\midrule \midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα τροποποιεί τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα τροποποιεί τις πληροφορίες του μηνύματος στην προσωπική OrbitDB βάση του χρήστη. \\ [0.5ex]
} }
{Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το τροποποιημένο μήνυμα.} {Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το τροποποιημένο μήνυμα.}
{Σενάριο χρήσης 6 - Βασική ροή} {Σενάριο χρήσης 6 - Βασική ροή}

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

@ -3,7 +3,7 @@
% ===== ===== % ===== =====
\subsection{Σενάριο χρήσης 7: Ψήφιση σε ψηφοφορία} \label{subsection:3-6-use-case-vote-in-poll} \subsection{Σενάριο χρήσης 7: Ψήφιση σε ψηφοφορία} \label{subsection:3-6-use-case-vote-in-poll}
Το σενάριο χρήσης 7, <ΣΧ-7>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ψήφιση σε μία ψηφοφορία. Στους πίνακες \ref{table:3-6-use-case-vote-in-poll} και \ref{table:3-6-use-case-vote-in-poll-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-7> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-vote-in-poll-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 7 (<ΣΧ-7>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ψήφιση σε μία ψηφοφορία. Στους πίνακες \ref{table:3-6-use-case-vote-in-poll} και \ref{table:3-6-use-case-vote-in-poll-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-7> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-vote-in-poll-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Ψηφίζω σε ψηφοφορία} {Ψηφίζω σε ψηφοφορία}
@ -11,7 +11,7 @@
{\ref{srs:functional-srs-vote-polls}} {\ref{srs:functional-srs-vote-polls}}
{\ref{srs:non-functional-srs-minimize-fees}} {\ref{srs:non-functional-srs-minimize-fees}}
{Ο χρήστης πατάει το κουμπί ψηφοφορίας.} {Ο χρήστης πατάει το κουμπί ψηφοφορίας.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος το οποίο περιλαμβάνει ψηφοφορία.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα ενός θέματος το οποίο περιλαμβάνει ψηφοφορία.}
{Σενάριο χρήσης 7, ψήφιση σε ψηφοφορία.} {Σενάριο χρήσης 7, ψήφιση σε ψηφοφορία.}
{\label{table:3-6-use-case-vote-in-poll}} {\label{table:3-6-use-case-vote-in-poll}}
@ -31,3 +31,4 @@
\caption{Σενάριο χρήσης 7 - Διάγραμμα βασικής ροής} \caption{Σενάριο χρήσης 7 - Διάγραμμα βασικής ροής}
\label{figure:3-6-use-case-vote-in-poll-base-flow-sequence-diagram} \label{figure:3-6-use-case-vote-in-poll-base-flow-sequence-diagram}
\end{figure} \end{figure}
\vspace{2\baselineskip}

4
chapters/3.application-design/3.6.use-cases/3.6.8.use-case-vote-post.tex

@ -3,7 +3,7 @@
% ===== ===== % ===== =====
\subsection{Σενάριο χρήσης 8: Ψήφιση μηνύματος} \label{subsection:3-6-use-case-vote-post} \subsection{Σενάριο χρήσης 8: Ψήφιση μηνύματος} \label{subsection:3-6-use-case-vote-post}
Το σενάριο χρήσης 8, <ΣΧ-8>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ψήφιση σε ένα μήνυμα. Στους πίνακες \ref{table:3-6-use-case-vote-post} και \ref{table:3-6-use-case-vote-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-8> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-vote-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 8 (<ΣΧ-8>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ψήφιση σε ένα μήνυμα. Στους πίνακες \ref{table:3-6-use-case-vote-post} και \ref{table:3-6-use-case-vote-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-8> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-vote-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Ψηφίζω σε μήνυμα} {Ψηφίζω σε μήνυμα}
@ -11,7 +11,7 @@
{\ref{srs:functional-srs-vote-posts}} {\ref{srs:functional-srs-vote-posts}}
{\ref{srs:non-functional-srs-minimize-fees}} {\ref{srs:non-functional-srs-minimize-fees}}
{Ο επισκέπτης πατάει το κουμπί υπερψήφισης ή καταψήφισης.} {Ο επισκέπτης πατάει το κουμπί υπερψήφισης ή καταψήφισης.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος το οποίο περιλαμβάνει τουλάχιστον ένα μήνυμα το οποίο δεν έχει δημιουργήσει ο ίδιος.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα ενός θέματος το οποίο περιλαμβάνει τουλάχιστον ένα μήνυμα το οποίο δεν έχει δημιουργήσει ο ίδιος.}
{Σενάριο χρήσης 8, ψήφιση μηνύματος.} {Σενάριο χρήσης 8, ψήφιση μηνύματος.}
{\label{table:3-6-use-case-vote-post}} {\label{table:3-6-use-case-vote-post}}

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

@ -3,7 +3,7 @@
% ===== ===== % ===== =====
\subsection{Σενάριο χρήσης 9: Διαγραφή τοπικών δεδομένων} \label{subsection:3-6-use-case-delete-local-data} \subsection{Σενάριο χρήσης 9: Διαγραφή τοπικών δεδομένων} \label{subsection:3-6-use-case-delete-local-data}
Το σενάριο χρήσης 9, <ΣΧ-9>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη διαγραφή των τοπικών δεδομένων. Στους πίνακες \ref{table:3-6-use-case-delete-local-data} και \ref{table:3-6-use-case-delete-local-data-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-9> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-delete-local-data-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. Το σενάριο χρήσης 9 (<ΣΧ-9>) περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη διαγραφή των τοπικών δεδομένων. Στους πίνακες \ref{table:3-6-use-case-delete-local-data} και \ref{table:3-6-use-case-delete-local-data-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-9> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-delete-local-data-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable \useCaseTable
{Διαγράφω τα τοπικά δεδομένα} {Διαγράφω τα τοπικά δεδομένα}
@ -11,7 +11,7 @@
{\ref{srs:functional-srs-delete-local-data}} {\ref{srs:functional-srs-delete-local-data}}
{-} {-}
{Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων.} {Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων.}
{Ο επισκέπτης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.} {Ο επισκέπτης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.}
{Σενάριο χρήσης 9, διαγραφή τοπικών δεδομένων.} {Σενάριο χρήσης 9, διαγραφή τοπικών δεδομένων.}
{\label{table:3-6-use-case-delete-local-data}} {\label{table:3-6-use-case-delete-local-data}}
@ -19,9 +19,9 @@
\useCaseBaseFlowTable \useCaseBaseFlowTable
{ {
1 & Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων. & Το σύστημα εμφανίζει την φόρμα "Επιβεβαίωση Διαγραφής Τοπικών Δεδομένων". \\ [0.5ex] 1 & Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων. & Το σύστημα εμφανίζει τη φόρμα "Επιβεβαίωση Διαγραφής Τοπικών Δεδομένων". \\ [0.5ex]
\midrule \midrule
2 & Ο επισκέπτης συμπληρώνει το πεδίο και πατάει το κουμπί "Υποβολή". & Το σύστημα διαγράφει όλες τις τοπικές βάσεις OrbitDb που χρησιμοποιούνται από την εφαρμογή. \\ [0.5ex] 2 & Ο επισκέπτης συμπληρώνει το πεδίο και πατάει το κουμπί "Υποβολή". & Το σύστημα διαγράφει όλες τις τοπικές OrbitDB βάσεις που χρησιμοποιούνται από την εφαρμογή. \\ [0.5ex]
} }
{Το σύστημα παραμένει πραγματοποιεί ανανέωση της σελίδας.} {Το σύστημα παραμένει πραγματοποιεί ανανέωση της σελίδας.}
{Σενάριο χρήσης 9 - Βασική ροή} {Σενάριο χρήσης 9 - Βασική ροή}
@ -33,3 +33,4 @@
\caption{Σενάριο χρήσης 9 - Διάγραμμα βασικής ροής} \caption{Σενάριο χρήσης 9 - Διάγραμμα βασικής ροής}
\label{figure:3-6-use-case-delete-local-data-base-flow-sequence-diagram} \label{figure:3-6-use-case-delete-local-data-base-flow-sequence-diagram}
\end{figure} \end{figure}
\vspace{\baselineskip}

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

@ -1,6 +1,7 @@
\newpage
\section{Αρχιτεκτονική σχεδίαση} \label{section:3-7-architecture-design} \section{Αρχιτεκτονική σχεδίαση} \label{section:3-7-architecture-design}
Στο κεφάλαιο αυτό περιγράφεται η αρχιτεκτονική του συστήματος, όπως προέκυψε από την επιλεγμένη τεχνολογική στοίβα και τις προαναφερθείσες απαιτήσεις του. Θα πρέπει να σημειωθεί ότι η παρουσιαζόμενη αρχιτεκτονική είναι πρώιμη και δεν αποτελεί την τελική υλοποίηση της πλατφόρμας, η οποία περιγράφεται στο κεφάλαιο \ref{chapter:4-application-implementation}. Σε αυτήν την ενότητα περιγράφεται η αρχιτεκτονική του συστήματος, όπως προέκυψε από την επιλεγμένη τεχνολογική στοίβα και τις προαναφερθείσες απαιτήσεις του. Θα πρέπει να σημειωθεί ότι η παρουσιαζόμενη αρχιτεκτονική είναι πρώιμη και δεν αποτελεί την τελική υλοποίηση της πλατφόρμας, η οποία περιγράφεται στο κεφάλαιο \ref{chapter:4-application-implementation}.
Συνοπτικά, η αρχιτεκτονική του συστήματος αποτυπώνεται στο παρακάτω διάγραμμα: Συνοπτικά, η αρχιτεκτονική του συστήματος αποτυπώνεται στο παρακάτω διάγραμμα:
@ -10,11 +11,13 @@
\caption{Αρχιτεκτονική του συστήματος (στάδιο σχεδίασης)} \caption{Αρχιτεκτονική του συστήματος (στάδιο σχεδίασης)}
\end{figure} \end{figure}
\vspace{\baselineskip}
Αξίζει να σημειωθούν τα εξής: Αξίζει να σημειωθούν τα εξής:
\begin{itemize} \begin{itemize}
\item Ο κώδικας του frontend εκτελείται αποκλειστικά στο σύστημα του χρήστη, χωρίς να απαιτείται κάποιος εξυπηρετητής. Δηλαδή, ο χρήστης αρκεί απλά να έχει τον κώδικα αποθηκευμένο στον υπολογιστή του. \item Ο κώδικας του frontend εκτελείται αποκλειστικά στο σύστημα του χρήστη, χωρίς να απαιτείται κάποιος εξυπηρετητής. Δηλαδή, ο χρήστης αρκεί απλά να έχει τον κώδικα αποθηκευμένο στον υπολογιστή του.
\item Ο χρήστης αλληλεπιδρά άμεσα με το UI και το MetaMask. Το MetaMask αποτελεί browser add-on, το οποίο διαχειρίζεται τα ιδιωτικά κλειδιά Ethereum του χρήστη και πραγματοποιεί τις συναλλαγές του τελευταίου με τα smart contracts. Στην προκειμένη περίπτωση, περιέχει τα κλειδιά που σχετίζονται αφενός με τη διεύθυνση με την οποία ο χρήστης εγγράφεται στην πλατφόρμα, αφετέρου με τις διευθύνσεις που περιέχουν τα NFTs των κοινοτήτων στις οποίες ανήκει και έχει δικαιώματα ψήφου. \item Ο χρήστης αλληλεπιδρά άμεσα με το UI και το MetaMask. Το MetaMask αποτελεί browser add-on, το οποίο διαχειρίζεται τα ιδιωτικά κλειδιά Ethereum του χρήστη και πραγματοποιεί τις συναλλαγές του τελευταίου με τα smart contract. Στην προκειμένη περίπτωση, περιέχει τα κλειδιά που σχετίζονται αφενός με τη διεύθυνση με την οποία ο χρήστης εγγράφεται στην πλατφόρμα, αφετέρου με τις διευθύνσεις που περιέχουν τα token των κοινοτήτων στις οποίες ανήκει και έχει δικαιώματα ψήφου.
\item Στο frontend εκτελείται στο παρασκήνιο ένας κόμβος για το IPFS. Αυτός συνδέεται με άλλους κατάλληλους κόμβους, διαμοιράζοντας τον κύριο όγκο των δεδομένων της εφαρμογής (π.χ. του περιεχομένου των μηνυμάτων). \item Στο frontend εκτελείται στο παρασκήνιο ένας κόμβος για το IPFS. Αυτός συνδέεται με άλλους κατάλληλους κόμβους, διαμοιράζοντας τον κύριο όγκο των δεδομένων της εφαρμογής (π.χ. του περιεχομένου των μηνυμάτων).
\item Τέλος, στο Ethereum blockchain υπάρχουν τόσο τα contracts της εφαρμογής, όσο και τα εξωτερικά contracts που παρέχουν τα tokens των κοινοτήτων. Τα μεν λειτουργούν ως το σημείο αναφοράς της εφαρμογής, επί του οποίου εκτελούνται οι ενέργειες και αποθηκεύονται οι μεταβλητές που είναι απολύτως απαραίτητες για τη λειτουργία της πλατφόρμας (π.χ. εγγεγραμμένοι χρήστες, δημιουργημένες κοινότητες). Τα δε, δημιουργούνται από εξωτερικές οντότητες, οι οποίες ορίζουν κατά τη βούλησή τους τον ακριβή τρόπο δημιουργίας και διαμοιρασμού των tokens τους στους χρήστες. \item Τέλος, στο Ethereum blockchain υπάρχουν τόσο τα contracts της εφαρμογής, όσο και τα εξωτερικά contracts που παρέχουν τα token των κοινοτήτων. Τα μεν λειτουργούν ως το σημείο αναφοράς της εφαρμογής, επί του οποίου εκτελούνται οι ενέργειες και αποθηκεύονται οι μεταβλητές που είναι απολύτως απαραίτητες για τη λειτουργία της πλατφόρμας (π.χ. εγγεγραμμένοι χρήστες, δημιουργημένες κοινότητες). Τα δε δημιουργούνται από εξωτερικές οντότητες, οι οποίες ορίζουν κατά τη βούλησή τους τον ακριβή τρόπο δημιουργίας και διαμοιρασμού των token τους στους χρήστες.
\end{itemize} \end{itemize}

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

@ -1,22 +1,25 @@
\section[Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός]{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός% \newpage
\sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός}} \setcounter{section}{8}
\sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός}
\setcounter{section}{7}
\section[Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός]{Προδιαγραφή μεθόδου υλοποίησης \\και χρονοπρογραμματισμός}
\sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός} \sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός}
\label{section:3-8-implementation-methodology-specification} \label{section:3-8-implementation-methodology-specification}
Κατά τον χρονοπρογραμματισμό ακολουθήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους, διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Τα Sprints αποτελούνται από επιμέρους διαχωρισμό της εργασίας σε epic tasks. Σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των επιμέρους tasks, κάθε epic χωρίστηκε σε tasks κατά το αρχικό στάδιο της υλοποίησης του. Κατά τον χρονοπρογραμματισμό υιοθετήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Η εργασία κάθε Sprint διαχωρίστηκε περαιτέρω σε επιμέρους epic. Ωστόσο, σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των task των epic, διαδικασία που πραγματοποιήθηκε κατά το αρχικό στάδιο της υλοποίησης των τελευταίων.
Ως σημαντικότερος στόχος της ανάπτυξης ορίζεται η δημιουργία ενός ελάχιστου βιώσιμου προϊόντος (Minumum Viable Product - MVP). Σε αυτό τον στόχο περιλαμβάνονται πιο στοιχειώδεις λειτουργίες μίας πλατφόρμας επικοινωνίας οι οποίες την κάνουν χρήσιμη, η δυνατότητα εγγραφής, δημιουργίας θεμάτων και μηνυμάτων και ανάγνωσης του υπάρχοντος περιεχομένου. Επειδή ο στόχος αυτός περιέχει από μόνος του σημαντική περιπλοκότητα και δυσκολία κρίθηκε αναγκαίος ο περαιτέρω διαχωρισμός του σε τρία Sprints. Ως σημαντικότερος στόχος της ανάπτυξης ορίζεται η δημιουργία ενός ελάχιστου βιώσιμου προϊόντος (Minumum Viable Product - MVP). Σε αυτό τον στόχο περιλαμβάνονται οι πιο στοιχειώδεις λειτουργίες μίας πλατφόρμας επικοινωνίας οι οποίες την κάνουν χρήσιμη, δηλαδή η δυνατότητα εγγραφής, δημιουργίας θεμάτων και μηνυμάτων και ανάγνωσης του υπάρχοντος περιεχομένου. Επειδή ο στόχος αυτός περιέχει από μόνος του σημαντική πολυπλοκότητα και δυσκολία κρίθηκε αναγκαίος ο περαιτέρω διαχωρισμός του σε τρία Sprint.
Στο πρώτο Sprint ορίστηκε ο στόχος της δημιουργίας μίας βάσης κώδικα (codebase), της εξοικείωσης με τα προγραμματιστικά εργαλεία του οικοσυστήματος των DApps και της επιτυχής δημιουργίας του πρώτου contract. Στο δεύτερο Sprint ο στόχος ορίστηκε ως η δημιουργία των τεχνικών χαρακτηριστικών που αφορούν τους χρήστες της πλατφόρμας και που οι ίδιοι (οι χρήστες) έχουν συνηθίσει να περιμένουν από μία τέτοια πλατφόρμα. Στο τρίτο Sprint συμπεριλήφθηκαν τα τεχνικά χαρακτηριστικά που απομένουν ώστε να δημιουργηθεί το MVP. Στο πρώτο Sprint ορίστηκε ο στόχος της δημιουργίας μίας βάσης κώδικα (codebase), της εξοικείωσης με τα προγραμματιστικά εργαλεία του οικοσυστήματος των DApp και της επιτυχούς δημιουργίας του πρώτου contract. Ως στόχος του δεύτερου Sprint ορίστηκε η δημιουργία των τεχνικών χαρακτηριστικών που αφορούν στους χρήστες της εφαρμογής και που οι ίδιοι έχουν συνηθίσει να αναμένουν από μία τέτοια πλατφόρμα. Στο τρίτο Sprint συμπεριλήφθηκαν τα τεχνικά χαρακτηριστικά που απομένουν ώστε να δημιουργηθεί το MVP.
Τα επόμενα τρία Sprints χτίζουν διαδοχικά πάνω στην υπάρχουσα δουλειά και υποδομή. Στο τέταρτο μέρος εργασίας ως στόχος ορίστηκε η προσθήκη των χαρακτηριστικών ψηφοφορίας πάνω στα μηνύματα και δημιουργίας ψηφοφοριών θεμάτων (polls). Το επόμενο Sprint περιλαμβάνει εργασίες δημιουργίας υποδομής και την πρώτη ημι-δημόσια εγκατάσταση της εφαρμογής σε περιβάλλον δοκιμής. Το τελευταίο Sprint αποτελεί το τελικό προϊόν και περιέχει tasks σχετικά με την δημιουργία κοινοτήτων και την beta εγκατάσταση της εφαρμογής. Τα επόμενα τρία Sprint χτίζουν διαδοχικά πάνω στην υπάρχουσα δουλειά και υποδομή. Στο τέταρτο μέρος εργασίας ως στόχος ορίστηκε η προσθήκη των δυνατοτήτων της ψηφοφορίας επί των μηνυμάτων, καθώς και της δημιουργίας ψηφοφοριών (polls) στα θέματα. Το επόμενο Sprint περιλαμβάνει εργασίες δημιουργίας υποδομής και την πρώτη ημι-δημόσια εγκατάσταση της εφαρμογής σε περιβάλλον δοκιμής. Το τελευταίο Sprint αποτελεί το τελικό προϊόν και περιέχει task σχετικά με την δημιουργία κοινοτήτων και τη beta εγκατάσταση της εφαρμογής.
\newpage
Εποπτικά, η διαδικασία της υλοποίησης περιγράφεται στο παρακάτω σχήμα: Εποπτικά, η διαδικασία της υλοποίησης περιγράφεται στο παρακάτω σχήμα:
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=.9\textwidth]{assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png} \includegraphics[width=\textwidth]{assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png}
\caption{Διαχωρισμός σε sprints} \caption{Διαχωρισμός σε Sprint (στάδιο σχεδίασης)}
\label{figure:3.8.implementation-methodology-specification-sprints} \label{figure:3.8.implementation-methodology-specification-sprints}
\end{figure} \end{figure}

5
custom-commands/use-case-commands.tex

@ -1,4 +1,5 @@
\newcommand{\useCaseTable}[8] {{ \newcommand{\useCaseTable}[8] {{
\vspace{\baselineskip}
\begin{table}[H] \begin{table}[H]
\begin{center} \begin{center}
\begin{tabularx}{\textwidth}{l X} \begin{tabularx}{\textwidth}{l X}
@ -16,6 +17,7 @@
\caption{#7} \caption{#7}
#8 #8
\end{table} \end{table}
\vspace{2\baselineskip}
}} }}
\newcommand{\useCaseBaseFlowTable}[4] {{ \newcommand{\useCaseBaseFlowTable}[4] {{
@ -36,9 +38,11 @@
\caption{#3} \caption{#3}
#4 #4
\end{table} \end{table}
\vspace{2\baselineskip}
}} }}
\newcommand{\useCaseAlternateFlowTable}[7] {{ \newcommand{\useCaseAlternateFlowTable}[7] {{
\vspace{\baselineskip}
\begin{table}[H] \begin{table}[H]
\begin{center} \begin{center}
\begin{tabularx}{\textwidth}{l X X} \begin{tabularx}{\textwidth}{l X X}
@ -58,4 +62,5 @@
\caption{#6} \caption{#6}
#7 #7
\end{table} \end{table}
\vspace{\baselineskip}
}} }}

BIN
thesis.pdf

Binary file not shown.

2
tikz/chapter-3/3-6-use-case-create-community-alternate-flow-1-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{} \newinst[4]{concordia}{:Concordia}{}
\newinst[4]{eth}{:Ethereum}{} \newinst[4]{eth}{:Ethereum}{}
\newinst{orbit}{:OrbitDb}{} \newinst{orbit}{:OrbitDB}{}
\begin{call}{actor}{Create community}{concordia}{Community creation form} \begin{call}{actor}{Create community}{concordia}{Community creation form}
\end{call} \end{call}

2
tikz/chapter-3/3-6-use-case-create-community-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[3]{concordia}{:Concordia}{} \newinst[3]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Create community}{concordia}{Community creation form} \begin{call}{actor}{Create community}{concordia}{Community creation form}
\end{call} \end{call}

2
tikz/chapter-3/3-6-use-case-create-post-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[3]{concordia}{:Concordia}{} \newinst[3]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Create post}{concordia}{Post creation form} \begin{call}{actor}{Create post}{concordia}{Post creation form}
\end{call} \end{call}

2
tikz/chapter-3/3-6-use-case-create-topic-alternate-flow-1-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{} \newinst[4]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Create topic}{concordia}{Topic creation form} \begin{call}{actor}{Create topic}{concordia}{Topic creation form}
\end{call} \end{call}

2
tikz/chapter-3/3-6-use-case-create-topic-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{} \newinst[4]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Create topic}{concordia}{Topic creation form} \begin{call}{actor}{Create topic}{concordia}{Topic creation form}
\end{call} \end{call}

2
tikz/chapter-3/3-6-use-case-delete-local-data-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{} \newinst[4]{concordia}{:Concordia}{}
\newinst[1]{eth}{:Ethereum}{} \newinst[1]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Delete local data}{concordia}{Delete confirmation form} \begin{call}{actor}{Delete local data}{concordia}{Delete confirmation form}
\end{call} \end{call}

2
tikz/chapter-3/3-6-use-case-fetch-topic-alternate-flow-1-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[2]{concordia}{:Concordia}{} \newinst[2]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Fetch topic}{concordia}{Topic} \begin{call}{actor}{Fetch topic}{concordia}{Topic}

2
tikz/chapter-3/3-6-use-case-fetch-topic-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[2]{concordia}{:Concordia}{} \newinst[2]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Fetch topic}{concordia}{Topic} \begin{call}{actor}{Fetch topic}{concordia}{Topic}

2
tikz/chapter-3/3-6-use-case-modify-post-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{} \newinst[4]{concordia}{:Concordia}{}
\newinst[1]{eth}{:Ethereum}{} \newinst[1]{eth}{:Ethereum}{}
\newinst[2]{orbit}{:OrbitDb}{} \newinst[2]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Modify post}{concordia}{Post modification form} \begin{call}{actor}{Modify post}{concordia}{Post modification form}
\end{call} \end{call}

2
tikz/chapter-3/3-6-use-case-sign-in-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[2]{concordia}{:Concordia}{} \newinst[2]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Fetch page}{concordia}{} \begin{call}{actor}{Fetch page}{concordia}{}

2
tikz/chapter-3/3-6-use-case-sign-up-sequence-diagram.tex

@ -2,7 +2,7 @@
\newthread{actor}{Actor}{} \newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{} \newinst[4]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{} \newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{} \newinst[1]{orbit}{:OrbitDB}{}
\begin{call}{actor}{Sign up}{concordia}{Sign up form} \begin{call}{actor}{Sign up}{concordia}{Sign up form}
\end{call} \end{call}

Loading…
Cancel
Save