diff --git a/.gitignore b/.gitignore index 99937ce..ea45bb2 100644 --- a/.gitignore +++ b/.gitignore @@ -281,3 +281,5 @@ TSWLatexianTemp* output Makefile .idea +*.sublime-project +*.sublime-workspace diff --git a/assets/figures/chapter-3/3.7.architecture-design.png b/assets/figures/chapter-3/3.7.architecture-design.png new file mode 100644 index 0000000..6a89a86 Binary files /dev/null and b/assets/figures/chapter-3/3.7.architecture-design.png differ diff --git a/assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png b/assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png new file mode 100644 index 0000000..45c172d Binary files /dev/null and b/assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png differ diff --git a/assets/figures/chapter-3/uas.png b/assets/figures/chapter-3/uas.png deleted file mode 100644 index be53260..0000000 Binary files a/assets/figures/chapter-3/uas.png and /dev/null differ diff --git a/assets/figures/chapter-4/4.1.implementation-methodology-jenkins-pipeline.png b/assets/figures/chapter-4/4.1.implementation-methodology-jenkins-pipeline.png new file mode 100644 index 0000000..8447c19 Binary files /dev/null and b/assets/figures/chapter-4/4.1.implementation-methodology-jenkins-pipeline.png differ diff --git a/assets/figures/chapter-4/4.1.implementation-methodology-kanban.png b/assets/figures/chapter-4/4.1.implementation-methodology-kanban.png new file mode 100644 index 0000000..710e37c Binary files /dev/null and b/assets/figures/chapter-4/4.1.implementation-methodology-kanban.png differ diff --git a/assets/figures/chapter-4/4.2.docker-logo.png b/assets/figures/chapter-4/4.2.docker-logo.png new file mode 100644 index 0000000..60b9017 Binary files /dev/null and b/assets/figures/chapter-4/4.2.docker-logo.png differ diff --git a/assets/figures/chapter-4/4.2.ganache-gui.png b/assets/figures/chapter-4/4.2.ganache-gui.png new file mode 100644 index 0000000..4588c54 Binary files /dev/null and b/assets/figures/chapter-4/4.2.ganache-gui.png differ diff --git a/assets/figures/chapter-4/4.2.ganache-logo.png b/assets/figures/chapter-4/4.2.ganache-logo.png new file mode 100644 index 0000000..5b2b09f Binary files /dev/null and b/assets/figures/chapter-4/4.2.ganache-logo.png differ diff --git a/assets/figures/chapter-4/4.2.jenkins-logo.png b/assets/figures/chapter-4/4.2.jenkins-logo.png new file mode 100644 index 0000000..5cd5250 Binary files /dev/null and b/assets/figures/chapter-4/4.2.jenkins-logo.png differ diff --git a/assets/figures/chapter-4/4.2.js-ipfs-logo.png b/assets/figures/chapter-4/4.2.js-ipfs-logo.png new file mode 100644 index 0000000..529d7c6 Binary files /dev/null and b/assets/figures/chapter-4/4.2.js-ipfs-logo.png differ diff --git a/assets/figures/chapter-4/4.2.libp2p-logo.png b/assets/figures/chapter-4/4.2.libp2p-logo.png new file mode 100644 index 0000000..7fd4b72 Binary files /dev/null and b/assets/figures/chapter-4/4.2.libp2p-logo.png differ diff --git a/assets/figures/chapter-4/4.2.node.js-logo.png b/assets/figures/chapter-4/4.2.node.js-logo.png new file mode 100644 index 0000000..bab737c Binary files /dev/null and b/assets/figures/chapter-4/4.2.node.js-logo.png differ diff --git a/assets/figures/chapter-4/4.3.orbitdb-logo.png b/assets/figures/chapter-4/4.2.orbitdb-logo.png similarity index 100% rename from assets/figures/chapter-4/4.3.orbitdb-logo.png rename to assets/figures/chapter-4/4.2.orbitdb-logo.png diff --git a/assets/figures/chapter-4/4.2.react-logo.png b/assets/figures/chapter-4/4.2.react-logo.png new file mode 100644 index 0000000..713bd65 Binary files /dev/null and b/assets/figures/chapter-4/4.2.react-logo.png differ diff --git a/assets/figures/chapter-4/4.2.react-redux.png b/assets/figures/chapter-4/4.2.react-redux.png new file mode 100644 index 0000000..96f6725 Binary files /dev/null and b/assets/figures/chapter-4/4.2.react-redux.png differ diff --git a/assets/figures/chapter-4/4.2.redux-logo.png b/assets/figures/chapter-4/4.2.redux-logo.png new file mode 100644 index 0000000..148b674 Binary files /dev/null and b/assets/figures/chapter-4/4.2.redux-logo.png differ diff --git a/assets/figures/chapter-4/4.2.redux-saga-logo.png b/assets/figures/chapter-4/4.2.redux-saga-logo.png new file mode 100644 index 0000000..38a4c43 Binary files /dev/null and b/assets/figures/chapter-4/4.2.redux-saga-logo.png differ diff --git a/assets/figures/chapter-4/4.2.truffle-logo.png b/assets/figures/chapter-4/4.2.truffle-logo.png new file mode 100644 index 0000000..d1d62ef Binary files /dev/null and b/assets/figures/chapter-4/4.2.truffle-logo.png differ diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.2.concordia-application-architecture.png b/assets/figures/chapter-4/4.3.architecture-4.3.2.concordia-application-architecture.png similarity index 100% rename from assets/figures/chapter-4/4.4.architecture-4.4.2.concordia-application-architecture.png rename to assets/figures/chapter-4/4.3.architecture-4.3.2.concordia-application-architecture.png diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.3.concordia-contracts-migrator-architecture.png b/assets/figures/chapter-4/4.3.architecture-4.3.3.concordia-contracts-migrator-architecture.png similarity index 100% rename from assets/figures/chapter-4/4.4.architecture-4.4.3.concordia-contracts-migrator-architecture.png rename to assets/figures/chapter-4/4.3.architecture-4.3.3.concordia-contracts-migrator-architecture.png diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.4.concordia-pinner-architecture.png b/assets/figures/chapter-4/4.3.architecture-4.3.4.concordia-pinner-architecture.png similarity index 100% rename from assets/figures/chapter-4/4.4.architecture-4.4.4.concordia-pinner-architecture.png rename to assets/figures/chapter-4/4.3.architecture-4.3.4.concordia-pinner-architecture.png diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.5.concordia-contracts-provider-architecture.png b/assets/figures/chapter-4/4.3.architecture-4.3.5.concordia-contracts-provider-architecture.png similarity index 100% rename from assets/figures/chapter-4/4.4.architecture-4.4.5.concordia-contracts-provider-architecture.png rename to assets/figures/chapter-4/4.3.architecture-4.3.5.concordia-contracts-provider-architecture.png diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-insert.png b/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png similarity index 100% rename from assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-insert.png rename to assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-read.png b/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png similarity index 100% rename from assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-read.png rename to assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png diff --git a/assets/figures/chapter-4/4.4.architecture-architecture-overview.png b/assets/figures/chapter-4/4.3.architecture-architecture-overview.png similarity index 100% rename from assets/figures/chapter-4/4.4.architecture-architecture-overview.png rename to assets/figures/chapter-4/4.3.architecture-architecture-overview.png diff --git a/assets/figures/chapter-4/4.4.communications-diagram.png b/assets/figures/chapter-4/4.3.communications-diagram.png similarity index 100% rename from assets/figures/chapter-4/4.4.communications-diagram.png rename to assets/figures/chapter-4/4.3.communications-diagram.png diff --git a/assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png b/assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png new file mode 100644 index 0000000..2e7fb89 Binary files /dev/null and b/assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png differ diff --git a/assets/figures/chapter-5/5.1.xkcd_2030_voting_software.png b/assets/figures/chapter-5/5.1.xkcd_2030_voting_software.png new file mode 100644 index 0000000..8ee2898 Binary files /dev/null and b/assets/figures/chapter-5/5.1.xkcd_2030_voting_software.png differ diff --git a/bibliography/references.bib b/bibliography/references.bib index ce2931a..13f7847 100644 --- a/bibliography/references.bib +++ b/bibliography/references.bib @@ -100,16 +100,35 @@ author = {ProtoSchool}, url = {https://proto.school/merkle-dags/} } -@online{4.2-github-flow, +@online{4.1-github-flow, title = {Understanding the GitHub flow}, author = {GitHub Guides}, url = {https://guides.github.com/introduction/flow/} } -@misc{4.3-orbitdb, +@misc{4.2-node.js, + title = {Node.js}, + author = {Wikipedia}, + url = {https://en.wikipedia.org/wiki/Node.js} +} +@misc{4.2-orbitdb, title = {OrbitDB}, url = {https://orbitdb.org} } -@misc{4.3-orbitdb-guide, +@misc{4.2-orbitdb-guide, title = {Getting Started with OrbitDB}, url = {https://github.com/orbitdb/orbit-db/blob/main/GUIDE.md} } +@misc{5.2-privacy-on-ethereum, + title = {Privacy on Ethereum}, + url = {https://docs.ethhub.io/ethereum-roadmap/privacy/}, + urldate = {2021-12-12} +} +@article{5.2-taxonomy-of-reputation-systems, + title = {Reputation systems: A survey and taxonomy}, + author = {Hendrikx, Ferry and Bubendorfer, Kris and Chard, Ryan}, + year = 2014, + month = {08}, + journal = {Journal of Parallel and Distributed Computing}, + volume = 75, + doi = {10.1016/j.jpdc.2014.08.004} +} diff --git a/chapters/0.preamble/0.1.summary.tex b/chapters/0.preamble/0.1.summary.tex index b56286c..5229d2f 100644 --- a/chapters/0.preamble/0.1.summary.tex +++ b/chapters/0.preamble/0.1.summary.tex @@ -1,14 +1,17 @@ \chapter*{Περίληψη} \addcontentsline{toc}{chapter}{Περίληψη} + Τις τελευταίες δεκαετίες, η ραγδαία ανάπτυξη του διαδικτύου μετέβαλε ριζικά τις ανθρώπινες κοινωνίες, μέσω μίας πληθώρας ψηφιακών εφαρμογών, οι οποίες, στη συντριπτική τους πλειοψηφία, προσφέρονται από παρόχους υπηρεσιών υπολογιστικού νέφους, ακολουθώντας την αρχιτεκτονική πελάτη-εξυπηρετητή. -Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτα απ' όλα, ο χρήστης καλείται να εμπιστευθεί τα προσωπικά του δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, διαθέτει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής. +Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτα απ' όλα, ο χρήστης καλείται να εμπιστευθεί τα προσωπικά του δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, αποκτάει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής. -Αυτοί είναι μερικοί βασικοί λόγοι που συνετέλεσαν στην ταχεία ανάπτυξη ενός συνόλου λογισμικών ανοιχτού κώδικα, όπως του Ethereum blockchain και του IPFS, τα οποία, αν και βρίσκονται σε σχετικά πρώιμο στάδιο, αποτελούν ήδη ικανά εργαλεία δημιουργίας κατανεμημένων και αποκεντρωμένων εφαρμογών. +Αυτοί είναι μερικοί βασικοί λόγοι που συνετέλεσαν στην ταχεία ανάπτυξη ενός συνόλου καινοτόμων λογισμικών ανοιχτού κώδικα, τα οποία βασίζονται σε τεχνολογίες όπως το blockchain και τα δίκτυα ομότιμων κόμβων. Τα παραπάνω, αν και βρίσκονται σε σχετικά πρώιμο στάδιο, αποτελούν ήδη ισχυρά εργαλεία δημιουργίας κατανεμημένων και αποκεντρωμένων εφαρμογών. Στόχος της παρούσας διπλωματικής εργασίας είναι η υλοποίηση μίας αυτόνομης κοινωνικής πλατφόρμας, η οποία, αξιοποιώντας τεχνολογίες αποκέντρωσης, αφενός θα επιστρέφει την κυριότητα των προσωπικών δεδομένων στον χρήστη, αφετέρου θα παρέχει τη δυνατότητα διενέργειας διαφανών δημοκρατικών ψηφοφοριών. Αυτά μέσα σε ένα πλαίσιο ανθεκτικό, τόσο σε σφάλματα και επιθέσεις, όσο και σε απόπειρες λογοκρισίας και παραποίησης. + +Η αναπτυχθείσα πιλοτική εφαρμογή "Concordia" προσεγγίζει τον παραπάνω στόχο συνδυάζοντας τα Ethereum και IPFS, ώστε να ορίσει έναν αποκεντρωμένο ψηφιακό χώρο, τόσο σε αρχιτεκτονικό όσο και πολιτικό επίπεδο. \\[2\baselineskip] \textbf{Λέξεις-Κλειδιά}: Αποκεντροποίηση, Ethereum, Blockchain, Έξυπνο Συμβόλαιο, Αποκεντρωμένη Εφαρμογή, IPFS, OrbitDB, React, Redux, Jenkins \ No newline at end of file diff --git a/chapters/0.preamble/0.2.abstract.tex b/chapters/0.preamble/0.2.abstract.tex index de70d50..2b3e62f 100644 --- a/chapters/0.preamble/0.2.abstract.tex +++ b/chapters/0.preamble/0.2.abstract.tex @@ -1,3 +1,17 @@ \chapter*{Abstract} \addcontentsline{toc}{chapter}{Abstract} -Don't forget the keywords. \ No newline at end of file + +In recent decades, the rapid growth of the internet has radically changed human +societies, through a plethora of digital applications, the vast majority of which are offered by cloud computing service providers, following the client-server architecture. + +Although this implementation model has proven to be highly functional and has improved significantly over the years, its centralized logic is accompanied by a number of problems. First of all, the user is required to trust his personal data to an external entity. Maintaining full control over them, the latter gains the ability to process, share and censor them, either to serve its own interests or to comply with other authorities in power. In addition, there is no guarantee of data availability, as, at any time, the server can be disconnected indefinitely and for a variety of reasons, such as a cyber attack or a natural disaster. + +These are some of the key factors that have led to the rapid development of a wide range of innovating open source software, that are based on technologiew such as blockchain and peer-to-peer networks. The above, although at a relatively early stage, are already powerful tools for creating distributed and decentralized applications. + +The aim of this thesis is the implementation of an autonomous social platform, +which, by utilizing decentralization technologies, on the one hand will return the ownership of the staff +user data, on the other hand, will enable transparent democratic voting processes. These in a context resistant to both faults and attacks, as well as attempts at censorship and falsification. + +The developed proof of concept application "Concordia" approaches the above goal by combining Ethereum and IPFS, in order to define a decentralized digital space, both at architectural and political level. +\\[2\baselineskip] +\textbf {Keywords}: Decentralization, Ethereum, Blockchain, Smart Contract, Decentralized Application, IPFS, OrbitDB, React, Redux, Jenkins \ No newline at end of file diff --git a/chapters/0.preamble/0.3.acknowledgements.tex b/chapters/0.preamble/0.3.acknowledgements.tex index 1abcf27..2e6812f 100644 --- a/chapters/0.preamble/0.3.acknowledgements.tex +++ b/chapters/0.preamble/0.3.acknowledgements.tex @@ -1,3 +1,11 @@ \chapter*{Ευχαριστίες} \addcontentsline{toc}{chapter}{Ευχαριστίες} -Ευχαριστούμε η Αθήνα. Ευχαριστούμε η Ελλάδα. \ No newline at end of file + +Σε αυτό το σημείο θα θέλαμε να ευχαριστήσουμε εγκάρδια όλους εκείνους που συνέβαλαν στην εκπόνηση της παρούσας εργασίας: + +\begin{itemize} + \item Τον επιβλέποντα καθηγητή μας, κ. Δημάκη Χρήστο, για την ευκαιρία που μας έδωσε να ασχοληθούμε με το συγκεκριμένο θέμα και την εμπιστοσύνη που μας έδειξε από την αρχή μέχρι το τέλος. + \item Τη Νικολαΐδου Μελίνα, για τη σχεδίαση του λογότυπου της εφαρμογής και τη δημιουργία σημαντικού τμήματος των σχημάτων του παρόντος εγγράφου. + \item Τις οικογένειες και τους φίλους μας, για την αμέριστη υλική και ηθική υποστήριξη που μας προσέφεραν καθ' όλη τη διάρκεια των σπουδών μας. + \item Ο ένας τον άλλον, για την άρτια επικοινωνία και συνεργασία, καθώς και για την υπομονή και την επιμονή, χαρακτηριστικά καθοριστικής σημασίας για την επιτυχή πορεία της διπλωματικής. +\end{itemize} diff --git a/chapters/1.introduction/1.1.general.tex b/chapters/1.introduction/1.1.general.tex index 8aa113c..304039c 100644 --- a/chapters/1.introduction/1.1.general.tex +++ b/chapters/1.introduction/1.1.general.tex @@ -1,4 +1,4 @@ -\section{Γενικά} +\section{Γενικά}\label{section:1-1-general} Η αλματώδης ανάπτυξη του διαδικτύου διαμόρφωσε ένα ολοκαίνουργιο τοπίο σε κάθε τομέα της ανθρώπινης δραστηριότητας, παρέχοντας ένα αναρίθμητο πλήθος εφαρμογών και υπηρεσιών. Τα μέσα κοινωνικής δικτύωσης, το ηλεκτρονικό ταχυδρομείο, η ψηφιακή ειδησεογραφία, ο διαμοιρασμός αρχείων και diff --git a/chapters/1.introduction/1.2.decentralization.tex b/chapters/1.introduction/1.2.decentralization.tex index 9301276..a11529b 100644 --- a/chapters/1.introduction/1.2.decentralization.tex +++ b/chapters/1.introduction/1.2.decentralization.tex @@ -1,4 +1,4 @@ -\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}. Στην πραγματικότητα η αποκέντρωση (ή, αντίστοιχα, ο συγκεντρωτισμός) μπορεί να τοποθετηθεί πάνω σε τρεις ξεχωριστούς άξονες, οι οποίοι είναι σε γενικές γραμμές ανεξάρτητοι ο ένας από τον άλλον. Αυτοί έχουν ως εξής: diff --git a/chapters/1.introduction/1.3.problem-definition.tex b/chapters/1.introduction/1.3.problem-definition.tex index e7b4af7..c1ddae6 100644 --- a/chapters/1.introduction/1.3.problem-definition.tex +++ b/chapters/1.introduction/1.3.problem-definition.tex @@ -1,4 +1,4 @@ -\section{Ορισμός του προβλήματος} \label{section:1-3-problem-definition} +\section{Ορισμός του προβλήματος}\label{section:1-3-problem-definition} Οι περισσότερες διαδεδομένες πλατφόρμες επικοινωνίας (κοινωνικά δίκτυα, mailing lists, forums κ.ά.) είναι ως επί το πλείστον συγκεντρωτικής μορφής, πράγμα το οποίο καθιστά αναγκαία την ύπαρξη κεντρικών αρχών που να τις διαχειρίζονται και να τις συντηρούν. diff --git a/chapters/1.introduction/1.4.thesis-goal.tex b/chapters/1.introduction/1.4.thesis-goal.tex index 900559a..88a153e 100644 --- a/chapters/1.introduction/1.4.thesis-goal.tex +++ b/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 κ.ά.). diff --git a/chapters/1.introduction/1.5.methodology.tex b/chapters/1.introduction/1.5.methodology.tex index ab68d81..8cccca6 100644 --- a/chapters/1.introduction/1.5.methodology.tex +++ b/chapters/1.introduction/1.5.methodology.tex @@ -1,9 +1,11 @@ -\section{Μεθοδολογία της διπλωματικής} +\section{Μεθοδολογία της διπλωματικής}\label{section:1-5-methodology} -Η πάρούσα διπλωματική είχε έμπνευση τις συζητήσεις μας με τον Δημάκη. +Έναυσμα της παρούσας εργασίας αποτέλεσε η παρατηρήση της αρχιτεκτονικής δομής των σύγχρονων διαδικτυακών εφαρμογών και η ανάγκη διερεύνησης των επιπτώσεών της στον τελικό χρήστη. -Αρχικά, πραγματοποιήθηκε έρευνα του χώρου των αποκετρωμένων τεχνολογιών με στόχο την κατανόηση των επιπλοκών αυτών των τεχνολογίων τόσο στην ανάπτυξη του κώδικα όσο και στην χρήση.... +Αρχικά, ορίστηκε με σαφήνεια το πρόβλημα (\hyperref[section:1-3-problem-definition]{ενότητα 1.3}) και ο στόχος της διπλωματικής (\hyperref[section:1-4-thesis-goal]{ενότητα 1.4}), λαμβάνοντας την απόφαση να περιοριστεί στον τομέα των μέσων κοινωνικής δικτύωσης και της ψηφιακής δημοκρατίας. -Στα πρώτα στάδια της έρευνας εξοικειωθήκαμε με τον χώρο .... +Στη συνέχεια, πραγματοποιήθηκε έρευνα του χώρου των αποκεντρωμένων τεχνολογιών και ξεκίνησε η διαδικασία της σχεδίασης της εφαρμογής, μέσω της επιλογής του μοντέλου της τεχνολογικής στοίβας και του κατάλληλου λογισμικού σε κάθε επίπεδό της. -Έπειτα, έγιναν μερικές πρώτες προσπάθειες για τη δημιουργία ενός proof of concept application... +Ακολούθησε η διαδικασία υλοποίησης της πιλοτικής πλατφόρμας Concordia, με στόχο να καταστεί ο αρχικός σχεδιασμός πραγματοποιήσιμος. + +Τέλος, εξήχθησαν συμπεράσματα και διατυπώθηκαν πιθανές μελλοντικές επεκτάσεις για την εφαρμογή. diff --git a/chapters/1.introduction/1.6.document-structure.tex b/chapters/1.introduction/1.6.document-structure.tex index c61a53b..adad267 100644 --- a/chapters/1.introduction/1.6.document-structure.tex +++ b/chapters/1.introduction/1.6.document-structure.tex @@ -1,11 +1,12 @@ -\section{Οργάνωση κεφαλαίων} +\section{Οργάνωση κεφαλαίων}\label{section:1-6-document-structure} -Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά παρατίθενται στα \hyperref[toc]{Περιεχόμενα}. Πιο συγκεκριμένα: +Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά διατυπώνονται στα \hyperref[toc]{Περιεχόμενα}. Πιο συγκεκριμένα: \begin{itemize} - \item Στο \hyperref[chapter:1-introduction]{\textbf{Κεφάλαιο 1}} - \item Στο \hyperref[chapter:2-theoretical-background]{\textbf{Κεφάλαιο 2}} - \item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} - \item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} - \item Στο \hyperref[chapter:5-conclusions]{\textbf{Κεφάλαιο 5}} -\end{itemize} \ No newline at end of file + \item Στο εισαγωγικό \hyperref[chapter:1-introduction]{\textbf{Κεφάλαιο 1}} γίνεται μία σύντομη ανάλυση του όρου "αποκέντρωση", μία περιγραφή του προβλήματος και μία παρουσίαση του στόχου της εργασίας. + \item Το \hyperref[chapter:2-theoretical-background]{\textbf{Κεφάλαιο 2}} σχετίζεται με το θεωρητικό υπόβαθρο, το οποίο περιλαμβάνει όλες τις έννοιες που είναι απαραίτητες για την κατανόηση των διαδικασιών της σχεδίασης και της υλοποίησης της εφαρμογής. + \item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} αναλύεται η διαδικασία της σχεδίασης της εφαρμογής. + \item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} περιγράφεται η διαδικασία υλοποίησης της πιλοτικής εφαρμογής Concordia. + \item Στο \hyperref[chapter:5-conclusions-open-areas]{\textbf{Κεφάλαιο 5}} παρουσιάζονται τα συμπεράσματα της εργασίας (\ref{section:5-1-conclusions}), καθώς και διάφορες πιθανές μελλοντικές επεκτάσεις (\ref{section:5-2-open-areas}). + \item Τέλος, το \hyperref[{screenshots-appendix}]{\textbf{Παράρτημα Αʹ}} περιέχει στιγμιότυπα οθόνης της υλοποιημένης εφαρμογής. +\end{itemize} diff --git a/chapters/2.theoretical-background/2.1.hash-functions.tex b/chapters/2.theoretical-background/2.1.hash-functions.tex index afa9a24..8b6580a 100644 --- a/chapters/2.theoretical-background/2.1.hash-functions.tex +++ b/chapters/2.theoretical-background/2.1.hash-functions.tex @@ -4,7 +4,7 @@ \begin{figure}[H] \centering - \includegraphics[width=15cm]{assets/figures/chapter-2/2.1.hash-functions-1.png} + \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.1.hash-functions-1.png} \caption{Λειτουργία συνάρτησης κατακερματισμού} \end{figure} @@ -19,7 +19,7 @@ \begin{figure}[H] \centering - \includegraphics[width=15cm]{assets/figures/chapter-2/2.1.hash-functions-2.png} + \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.1.hash-functions-2.png} \caption{Παράδειγμα λειτουργίας συνάρτησης κατακερματισμού} \end{figure} diff --git a/chapters/2.theoretical-background/2.2.asymmetric-cryptography.tex b/chapters/2.theoretical-background/2.2.asymmetric-cryptography.tex index 96fecd6..4500acb 100644 --- a/chapters/2.theoretical-background/2.2.asymmetric-cryptography.tex +++ b/chapters/2.theoretical-background/2.2.asymmetric-cryptography.tex @@ -11,7 +11,7 @@ \begin{figure}[H] \centering - \includegraphics[width=15cm]{assets/figures/chapter-2/2.2.asymmetric-key-generation.png} + \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.2.asymmetric-key-generation.png} \caption{Παραγωγή ασύμμετρου ζεύγους κλειδιών} \end{figure} @@ -30,7 +30,7 @@ \begin{figure}[H] \centering - \includegraphics[width=15cm]{assets/figures/chapter-2/2.2.asymmetric-end-to-end-communication.png} + \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.2.asymmetric-end-to-end-communication.png} \caption{Κρυπτογράφηση απ' άκρη σ' άκρη} \end{figure} diff --git a/chapters/2.theoretical-background/2.3.merkle-trees.tex b/chapters/2.theoretical-background/2.3.merkle-trees.tex index 383c766..d6091b4 100644 --- a/chapters/2.theoretical-background/2.3.merkle-trees.tex +++ b/chapters/2.theoretical-background/2.3.merkle-trees.tex @@ -6,7 +6,7 @@ \begin{figure}[H] \centering - \includegraphics[width=15cm]{assets/figures/chapter-2/2.3.merkle-tree.png} + \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.3.merkle-tree.png} \caption{Παράδειγμα δυαδικού δένδρου Merkle} \end{figure} diff --git a/chapters/2.theoretical-background/2.4.p2p-networks.tex b/chapters/2.theoretical-background/2.4.p2p-networks.tex index 7495b9d..aa6610e 100644 --- a/chapters/2.theoretical-background/2.4.p2p-networks.tex +++ b/chapters/2.theoretical-background/2.4.p2p-networks.tex @@ -9,5 +9,4 @@ \item Στα "Υβριδικά" (Hybrid) P2P networks, στα οποία συμμετέχουν επιπλέον και κεντρικές οντότητες, παρέχοντας απαραίτητα τμήματα των προσφερόμενων υπηρεσιών. \end{itemize} -Από εδώ και στο εξής, εάν δεν αναφέρεται ρητά η κατηγορία κάποιου P2P network, θα εννοείται ότι ανήκει στην πρώτη. - +Από εδώ και στο εξής, εάν δεν αναφέρεται ρητά η κατηγορία κάποιου P2P network, θα εννοείται ότι ανήκει στην πρώτη. \ No newline at end of file diff --git a/chapters/2.theoretical-background/2.6.ethereum.tex b/chapters/2.theoretical-background/2.6.ethereum.tex index 2c29d50..aa2131c 100644 --- a/chapters/2.theoretical-background/2.6.ethereum.tex +++ b/chapters/2.theoretical-background/2.6.ethereum.tex @@ -1,10 +1,6 @@ \section{Ethereum} \label{section:2-6-ethereum} -\begin{figure}[H] - \centering - \includegraphics[width=2cm]{assets/figures/chapter-2/2.6.ethereum-logo.png} - \caption{Ethereum logo} -\end{figure} +\logo{chapter-2/2.6.ethereum-logo}{Ethereum logo} Το Ethereum είναι ένα δημόσιο blockchain ανοιχτού κώδικα με εγγενές κρυπτονόμισμα το Ether (ETH). Παρέχει μία προγραμματιστική πλατφόρμα με ενσωματωμένη μία Turing-complete γλώσσα προγραμματισμού, που μπορεί να χρησιμοποιηθεί για τη δημιουργία αποκεντρωμένων εφαρμογών (Decentralized Applications ή DApps) μέσω της χρήσης "έξυπνων συμβολαίων" (smart contracts).\cite{2.6-ethereum-whitepaper} diff --git a/chapters/2.theoretical-background/2.7.ipfs.tex b/chapters/2.theoretical-background/2.7.ipfs.tex index 7408768..fdca289 100644 --- a/chapters/2.theoretical-background/2.7.ipfs.tex +++ b/chapters/2.theoretical-background/2.7.ipfs.tex @@ -1,10 +1,6 @@ \section{IPFS} \label{section:2-7-ipfs} -\begin{figure}[H] - \centering - \includegraphics[width=2cm]{assets/figures/chapter-2/2.7.ipfs-logo.png} - \caption{IPFS logo} -\end{figure} +\logo{chapter-2/2.7.ipfs-logo}{IPFS logo} Το IPFS (InterPlanetary File System) είναι \textit{ένα P2P πρωτόκολλο υπερμέσων, σχεδιασμένο για να διατηρήσει και να αυξήσει τη γνώση της ανθρωπότητας κάνοντας το διαδίκτυο αναβαθμίσιμο, ανθεκτικό και πιο ανοιχτό}.\cite{2.7-ipfs} Πρακτικά πρόκειται για ένα κατανεμημένο σύστημα για αποθήκευση και πρόσβαση σε αρχεία, ιστότοπους, εφαρμογές και δεδομένα. Το περιεχόμενο είναι προσβάσιμο μέσω ενός δικτύου ομότιμων κόμβων που βρίσκονται οπουδήποτε στον κόσμο, οι οποίοι ενδέχεται να να αποθηκεύουν πληροφορία, να τη μεταφέρουν (relay nodes) ή και τα δύο.\cite{2.7-ipfs-docs} @@ -16,7 +12,7 @@ \item \textbf{Σύνδεση περιεχομένου μέσω κατευθυνόμενων άκυκλων γράφων (Directed Acyclic Graphs ή DAGs)}. Το IPFS αξιοποιεί DAGs (και συγκεκριμένα Merkle DAGs), μίας δομής δεδομένων της οποίας κάθε κόμβος έχει ως μοναδικό αναγνωριστικό το hash του περιεχομένου του (το CID). \begin{enumitemcenteredfigure} - \includegraphics[width=15cm]{assets/figures/chapter-2/2.7.merkle-dag.png} + \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.7.merkle-dag.png} \caption{Merkle DAG\cite{2.7-merkle-dags-proto-school}} \end{enumitemcenteredfigure} diff --git a/chapters/3.application-design/3.6.use-cases.tex b/chapters/3.application-design/3.6.use-cases.tex index b135a04..facf84c 100644 --- a/chapters/3.application-design/3.6.use-cases.tex +++ b/chapters/3.application-design/3.6.use-cases.tex @@ -13,5 +13,4 @@ \input{chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll} \input{chapters/3.application-design/3.6.use-cases/3.6.8.use-case-vote-post} \input{chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data} - -%TODO: Add missing use cases \ No newline at end of file +\input{chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex b/chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex new file mode 100644 index 0000000..6e9923f --- /dev/null +++ b/chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex @@ -0,0 +1,70 @@ +% ===== ===== +% Use case 10 +% ===== ===== +\subsection{Σενάριο χρήσης 10: Δημιουργία κοινότητας} \label{subsection:3-10-use-case-create-community} + +Το σενάριο χρήσης 10, <ΣΧ-10>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την δημιουργία μίας κοινότητας. Στους πίνακες \ref{table:3-6-use-case-create-community} και \ref{table:3-6-use-case-create-community-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-10> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-create-community-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. + +\useCaseTable +{Δημιουργώ νέα κοινότητα} +{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει νέα κοινότητα.} +{\ref{srs:functional-srs-create-communities}, \ref{srs:functional-srs-assign-community-contract}} +{\ref{srs:non-functional-srs-minimize-fees}} +{Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας.} +{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην αρχική σελίδα.} +{Σενάριο χρήσης 10, δημιουργία νέας κοινότητας.} +{\label{table:3-6-use-case-create-community}} + +% ===== Base flow ===== + +\useCaseBaseFlowTable +{ + 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Κοινότητας''. \\ [0.5ex] + \midrule + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex] +} +{Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} +{Σενάριο χρήσης 10 - Βασική ροή} +{\label{table:3-6-use-case-create-community-base-flow}} + +\begin{figure}[H] + \centering + \input{tikz/chapter-3/3-6-use-case-create-community-sequence-diagram} + \caption{Σενάριο χρήσης 10 - Διάγραμμα βασικής ροής} + \label{figure:3-6-use-case-create-community-base-flow-sequence-diagram} +\end{figure} + +% ===== Alternate flow ===== + +Το <ΣΧ-10> περιέχει επίσης δύο εναλλακτικές ροές που μπορεί να προκύψουν βάσει των επιλογών του χρήστη και οι οποίες περιγράφονται στους πίνακες \ref{table:3-6-use-case-create-community-alternate-flow-1} και \ref{table:3-6-use-case-create-community-alternate-flow-2}. Η εναλλακτική ροή 1 φαίνεται επίσης στο σχήμα \ref{figure:3-6-use-case-create-community-alternate-flow-1-sequence-diagram} όπου παρουσιάζεται το διάγραμμα ροής της. + +\useCaseAlternateFlowTable +{1} +{Ο χρήστης ορίζει εξωτερικό contract για την κοινότητα.} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Συμβολαίου'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Σύνδεση Συμβολαίου''.} +{ + 1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Κοινότητας'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Σύνδεση Συμβολαίου''. \\ [0.5ex] + \midrule + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί την νέα κοινότητα στο blockchain και την συνδέει με το εξωτερικό contract. \\ [0.5ex] +} +{Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} +{Σενάριο χρήσης 10 - Εναλλακτική ροή 1} +{\label{table:3-6-use-case-create-community-alternate-flow-1}} + +\begin{figure}[H] + \centering + \input{tikz/chapter-3/3-6-use-case-create-community-alternate-flow-1-sequence-diagram} + \caption{Σενάριο χρήσης 3 - Διάγραμμα εναλλακτικής ροής 1} + \label{figure:3-6-use-case-create-community-alternate-flow-1-sequence-diagram} +\end{figure} + +\useCaseAlternateFlowTable +{2} +{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} +{ + 1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. +} +{Το σενάριο χρήσης τερματίζεται.} +{Σενάριο χρήσης 10 - Εναλλακτική ροή 2} +{\label{table:3-6-use-case-create-community-alternate-flow-2}} diff --git a/chapters/3.application-design/3.7.architecture-design.tex b/chapters/3.application-design/3.7.architecture-design.tex index f613201..39f2b7b 100644 --- a/chapters/3.application-design/3.7.architecture-design.tex +++ b/chapters/3.application-design/3.7.architecture-design.tex @@ -1,62 +1,21 @@ \section{Αρχιτεκτονική σχεδίαση} \label{section:3-7-architecture-design} -Στο κεφάλαιο αυτό θα περιγραφεί η αρχιτεκτονική του συστήματος, όπως αυτό σχεδιάστηκε αρχικά. Η αρχιτεκτονική αυτή είναι πρώιμη και δεν αποτελεί την τελική υλοποίηση της πλατφόρμας στο σύνολό της. Μέρη της πρώιμης αρχιτεκτονικής είναι διαφορετικά από αυτά της τελικής η οποία περιγράφεται σε επόμενο κεφάλαιο. +Στο κεφάλαιο αυτό περιγράφεται η αρχιτεκτονική του συστήματος, όπως προέκυψε από την επιλεγμένη τεχνολογική στοίβα και τις προαναφερθείσες απαιτήσεις του. Θα πρέπει να σημειωθεί ότι η παρουσιαζόμενη αρχιτεκτονική είναι πρώιμη και δεν αποτελεί την τελική υλοποίηση της πλατφόρμας, η οποία περιγράφεται στο κεφάλαιο \ref{chapter:4-application-implementation}. -% TODO: remove future tense used in this chapter -% TODO: add a brand new diagram! - -% Temporary Paste: Λογικά μέρη - -Η πλατφόρμα χωρίζεται σε δύο λογικά μέρη τα οποία θα αναλυθούν σε λεπτομέρεια στα επόμενα κεφάλαια: - -\begin{enumerate} - \item μία αυτοτελή και πλήρως αποκεντρωτική πλατφόρμα επικοινωνίας γενικής χρήσης - \item μία μερικώς αποκεντρωτική και μη αυτοτελή επέκταση του πρώτου μέρους στοχευμένη για χρήση από μέλη του ΑΠΘ -\end{enumerate} - -\subsection{Πρώτο μέρος} \label{subsection:3-1-first-part} - -Το πρώτο μέρος αποτελεί μία αυτοτελή και πλήρως αποκεντρωτική πλατφόρμα. Στόχος της πλατφόρμας είναι να παρέχει τη -δυνατότητα ελευθερίας λόγου, απρόσβλητου σε λογοκρισία από κεντρικές οντότητες εξουσίας. Στην πλατφόρμα αυτή θα μπορεί -οποιοσδήποτε να δημιουργήσει θέματα (topics) ή να απαντήσει σε άλλα. Η επεξεργασία των πληροφοριών που παράγονται και η -οποία είναι αναγκαία για τη λειτουργία της πλατφόρμας θα παρέχεται από το Ethereum μέσω των smart contracts τα οποία θα -υλοποιηθούν στο πλαίσιο αυτής της διπλωματικής. Τα contracts αποτελούν ανοιχτό λογισμικό από τη φύση τους, κάτι το οποίο -ενισχύει την διαφάνεια των διαδικασιών κάνοντας το επιχείρημα της ισότητας του λόγου πιο δυνατό. Τα contracts αυτά θα -δέχονται transactions από τους χρήστες και θα εγγράφουν τα αποτελέσματα στο Storage Layer του blockchain: - -% TODO: remove AUTH stuff, make it more abstract - -Το πρόβλημα αυτής της προσέγγισης είναι πως, για τη λειτουργία της, απαιτείται για κάθε συναλλαγή (transaction) οι -χρήστες να καταβάλουν ένα τέλος. Το τέλος αυτό αφορά τα fees που είναι αναγκαία για την περάτωση των συναλλαγών. Παρόλο -που υπάρχουν σχέδια από την ομάδα ανάπτυξης του Ethereum για τη μείωσή αυτών των fees στο μέλλον, θα είναι πάντα -αναπόφευκτα για τη χρήση του EVM. Ωστόσο, πρέπει να σημειωθούν δύο πράγματα. Αφενός τα τέλη παρέχουν μια μορφή -προστασίας απέναντι σε κακόβουλους χρήστες που θα πλημμύριζαν την εφαρμογή με ανεπιθύμητο ποσοτικά ή ποιοτικά -περιεχόμενο καθώς θα τους ήταν οικονομικά ασύμφορη μια τέτοια επίθεση. Αφετέρου υπάρχουν κάποιες εναλλακτικές ώστε να -μειωθεί δραστικά η εμπλοκή του χρήστη με την καταβολή τελών, κάτι που περιγράφεται παρακάτω στις κατηγορίες χρηστών. - -Τα παραπάνω πρακτικά σημαίνουν ότι το Smart Contract θα πρέπει ανά διαστήματα να φορτίζεται με Ether ή οι χρήστες να -καταβάλουν τα δικά τους έξοδα. - -\subsection{Δεύτερο μέρος} \label{subsection:3-2-first-part} - -Το δεύτερο μέρος αποτελεί μια μερικώς αποκεντρωτική και μη αυτοτελή πλατφόρμα που λειτουργεί προσθετικά στην πρώτη. Το -κομμάτι αυτό απευθύνεται αποκλειστικά σε επικυρωμένα μέλη του ΑΠΘ και συνιστά ένα αμεσοδημοκρατικό σύστημα ψηφοφορίας -που θα εγγυάται σε υψηλό βαθμό την εγκυρότητα και την ανωνυμία των διαδικασιών του. Στο πρώτο μέρος, το οποίο αναλύθηκε -προηγουμένως, θα παρέχεται η δυνατότητα δημιουργίας θεμάτων προς ψηφοφορία. Πάνω στα θέματα αυτά θα ψηφίζουν όσοι έχουν -δικαίωμα, ενώ το δικαίωμα στην ψήφο θα ορίζεται με την κατοχή ενός ανάλογου token στο Ethereum. +Συνοπτικά, η αρχιτεκτονική του συστήματος αποτυπώνεται στο παρακάτω διάγραμμα: +% TODO: Add proper figure \begin{figure}[H] \centering - \includegraphics[width=\textwidth]{assets/figures/chapter-3/uas} - \caption{Ethereum logo} + \includegraphics[width=.75\textwidth]{assets/figures/chapter-3/3.7.architecture-design} + \caption{Αρχιτεκτονική του συστήματος (στάδιο σχεδίασης)} \end{figure} -O χρήστης, μέσω ενός frontend με τη μορφή ιστοσελίδας, θα μπορεί να πιστοποιήσει μέσω login στο \texttt{it.auth.gr} την -ακαδημαϊκή του ταυτότητα. Στη συνέχεια η Υπηρεσία Διανομής Token (Token Distribution Service - TDS), όντως ο ιδιοκτήτης -(owner) του contract που δινέμει τα tokens θα παρέχει στο χρήστη δύο tokens. Το πρώτο token θα δίνει στον χρήστης το -δικαίωμα ψήφου (verified user token) και το δεύτερο θα σηματοδοτεί στη πλατφόρμα ότι πρέπει του επιστρέφει τα τέλη -(fees) τα οποία πληρώνει (trusted user token). +Αξίζει να σημειωθούν τα εξής: -*Ιδανικά, με τη συνεργασία του ΑΠΘ, το UAS θα αποτελεί υπηρεσία συνεργαζόμενη με την Υποδομή πιστοποίησης και -εξουσιοδότησης (βλ. https://it.auth.gr/el/infrastructure/aai). Αυτό σημαίνει ότι οι χρήστες δε θα χρειάζεται να -εμπιστευτούν τον UAS με τα it credential τους. +\begin{itemize} + \item Ο κώδικας του frontend εκτελείται αποκλειστικά στο σύστημα του χρήστη, χωρίς να απαιτείται κάποιος εξυπηρετητής. Δηλαδή, ο χρήστης αρκεί απλά να έχει τον κώδικα αποθηκευμένο στον υπολογιστή του. + \item Ο χρήστης αλληλεπιδρά άμεσα με το UI και το MetaMask. Το MetaMask αποτελεί browser add-on, το οποίο διαχειρίζεται τα ιδιωτικά κλειδιά Ethereum του χρήστη και πραγματοποιεί τις συναλλαγές του τελευταίου με τα smart contracts. Στην προκειμένη περίπτωση, περιέχει τα κλειδιά που σχετίζονται αφενός με τη διεύθυνση με την οποία ο χρήστης εγγράφεται στην πλατφόρμα, αφετέρου με τις διευθύνσεις που περιέχουν τα NFTs των κοινοτήτων στις οποίες ανήκει και έχει δικαιώματα ψήφου. + \item Στο frontend εκτελείται στο παρασκήνιο ένας κόμβος για το IPFS. Αυτός συνδέεται με άλλους κατάλληλους κόμβους, διαμοιράζοντας τον κύριο όγκο των δεδομένων της εφαρμογής (π.χ. του περιεχομένου των μηνυμάτων). + \item Τέλος, στο Ethereum blockchain υπάρχουν τόσο τα contracts της εφαρμογής, όσο και τα εξωτερικά contracts που παρέχουν τα tokens των κοινοτήτων. Τα μεν λειτουργούν ως το σημείο αναφοράς της εφαρμογής, επί του οποίου εκτελούνται οι ενέργειες και αποθηκεύονται οι μεταβλητές που είναι απολύτως απαραίτητες για τη λειτουργία της πλατφόρμας (π.χ. εγγεγραμμένοι χρήστες, δημιουργημένες κοινότητες). Τα δε, δημιουργούνται από εξωτερικές οντότητες, οι οποίες ορίζουν κατά τη βούλησή τους τον ακριβή τρόπο δημιουργίας και διαμοιρασμού των tokens τους στους χρήστες. +\end{itemize} \ No newline at end of file diff --git a/chapters/3.application-design/3.8.implementation-methodology-specification.tex b/chapters/3.application-design/3.8.implementation-methodology-specification.tex index f5e08b0..6da38ce 100644 --- a/chapters/3.application-design/3.8.implementation-methodology-specification.tex +++ b/chapters/3.application-design/3.8.implementation-methodology-specification.tex @@ -1,40 +1,20 @@ \section{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός} \label{section:3-8-implementation-methodology-specification} -% TODO: remove feeless and reputation from cycles, add communities +Κατά τον χρονοπρογραμματισμό ακολουθήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους, διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Τα Sprints αποτελούνται από επιμέρους διαχωρισμό της εργασίας σε epic tasks. Σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των επιμέρους tasks, κάθε epic χωρίστηκε σε tasks κατά το αρχικό στάδιο της υλοποίησης του. -\subsection{Προδιαγραφή κύκλων} +Ως σημαντικότερος στόχος της ανάπτυξης ορίζεται η δημιουργία ενός ελάχιστου βιώσιμου προϊόντος (Minumum Viable Product - MVP). Σε αυτό τον στόχο περιλαμβάνονται πιο στοιχειώδεις λειτουργίες μίας πλατφόρμας επικοινωνίας οι οποίες την κάνουν χρήσιμη, η δυνατότητα εγγραφής, δημιουργίας θεμάτων και μηνυμάτων και ανάγνωσης του υπάρχοντος περιεχομένου. Επειδή ο στόχος αυτός περιέχει από μόνος του σημαντική περιπλοκότητα και δυσκολία κρίθηκε αναγκαίος ο περαιτέρω διαχωρισμός του σε τρία Sprints. -Εποπτικά, η διαδικασία της υλοποίησης περιγράφεται ως εξής: +Στο πρώτο Sprint ορίστηκε ο στόχος της δημιουργίας μίας βάσης κώδικα (codebase), της εξοικείωσης με τα προγραμματιστικά εργαλεία του οικοσυστήματος των DApps και της επιτυχής δημιουργίας του πρώτου contract. Στο δεύτερο Sprint ο στόχος ορίστηκε ως η δημιουργία των τεχνικών χαρακτηριστικών που αφορούν τους χρήστες της πλατφόρμας και που οι ίδιοι (οι χρήστες) έχουν συνηθίσει να περιμένουν από μία τέτοια πλατφόρμα. Στο τρίτο Sprint συμπεριλήφθηκαν τα τεχνικά χαρακτηριστικά που απομένουν ώστε να δημιουργηθεί το MVP. -% TODO: insert revamped diagram +Τα επόμενα τρία Sprints χτίζουν διαδοχικά πάνω στην υπάρχουσα δουλειά και υποδομή. Στο τέταρτο μέρος εργασίας ως στόχος ορίστηκε η προσθήκη των χαρακτηριστικών ψηφοφορίας πάνω στα μηνύματα και δημιουργίας ψηφοφοριών θεμάτων (polls). Το επόμενο Sprint περιλαμβάνει εργασίες δημιουργίας υποδομής και την πρώτη ημι-δημόσια εγκατάσταση της εφαρμογής σε περιβάλλον δοκιμής. Το τελευταίο Sprint αποτελεί το τελικό προϊόν και περιέχει tasks σχετικά με την δημιουργία κοινοτήτων και την beta εγκατάσταση της εφαρμογής. -\subsection{Πρώτη φάση} +Εποπτικά, η διαδικασία της υλοποίησης περιγράφεται στο παρακάτω σχήμα (σχήμα \ref{figure:3.8.implementation-methodology-specification-sprints}). -% Παλιό από Drive -Στήνεται ένα Ethereum Private Network ως βάση πάνω στην οποία θα δουλέψουμε. Πάνω σε αυτό γράφουμε τα contracts που θα είναι υπεύθυνα για διεκπεραίωση ή μη των posts. -Στη συνέχεια αναπτύσσεται ο απαραίτητος κώδικας που υλοποιεί το posting χρησιμοποιώντας τις βιβλιοθήκες που δίνονται από το IPFS για την επικοινωνία μεταξύ των κόμβων του δικτύου και αυτές που δίνονται από τη BigChainDB για την αποθήκευση των πληροφοριών με διανεμημένο τρόπο. -Γίνονται δοκιμές για την εξακρίβωση της σωστής λειτουργίας του αποτελέσματος και διορθώνονται τυχόν λάθη στο κώδικα. +\begin{figure}[H] + \centering + \includegraphics[width=.8\textwidth]{assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png} + \caption{Διαχωρισμός σε sprints} + \label{figure:3.8.implementation-methodology-specification-sprints} +\end{figure} -\subsection{Δεύτερη φάση} - -% Παλιό από Drive -Υλοποιείται το δικαίωμα ψήφου και posting χωρίς fees. Αυτό γίνεται μέσω δύο contracts που θα δημιουργούν δύο διαφορετικά tokens (voting token, feeless token) και θα τα αποδίδουν στον εκάστοτε χρήστη που πρέπει να πάρει το δικαίωμα. -Αναπτύσσεται κώδικας που να υλοποιεί τη διαδικασία ψηφοφορίας. -Γίνονται δοκιμές για την εξακρίβωση της σωστής λειτουργίας του αποτελέσματος και διορθώνονται τυχόν λάθη στο κώδικα. Σε αυτή τη φάση η απόδοση των tokens θα γίνει χειροκίνητα για το σκοπό της δοκιμής. - -\subsection{Τρίτη φάση} - -% Παλιό από Drive -Υλοποιείται ένα σύστημα απόδοσης εμπιστοσύνης (ΣΑΠ). -Αναπτύσσονται τα contracts που είναι απαραίτητα για τη λειτουργία του ΣΑΠ καθώς και για την αυτόματη απόδοση feeless token στους trusted χρήστες. -Γίνονται δοκιμές για την εξακρίβωση της σωστής λειτουργίας του αποτελέσματος και διορθώνονται τυχόν λάθη στο κώδικα. -Εφόσον η εφαρμογή περάσει το στάδιο των δοκιμών είναι έτοιμη για alpha deployment, είναι δηλαδή έτοιμη για χρήση από το κοινό, υπολείπονται όμως χαρακτηριστικά που είναι ιδιαίτερα θεμιτά αλλά όχι απαραίτητα για τη λειτουργία. - -\subsection{Τέταρτη φάση} - -% Παλιό από Drive -Αναπτύσσεται ο κώδικας του (μοναδικού) συγκεντρωτικού τμήματος του συστήματος το οποίο ανήκει στο δεύτερο κομμάτι - του UAS: Έτσι αυτοματοποιείται η διαδικασία απόδοσης των token, που στην προηγούμενη φάση έγινε χειροκίνητα. -Γίνονται δοκιμές για την εξακρίβωση της σωστής λειτουργίας του αποτελέσματος και διορθώνονται τυχόν λάθη στο κώδικα. -Εφόσον η εφαρμογή περάσει το στάδιο των δοκιμών είναι έτοιμη για ένα beta deployment, ώστε να γίνει πιο ευρύς έλεγχος από μία ομάδα δοκιμών και να παρθεί feedback για την εμπειρία χρήστη. - -Για το τελικό deployment θα μπορούσε να τεθεί ως στόχος η κατά το δυνατόν μείωση των τελών για τη λειτουργία της πλατφόρμας, ανεπτυγμένα χαρακτηριστικά επικοινωνίας όπως δόμηση των συζητήσεων σε κατηγορίες, προφίλ χρηστών και άλλα χαρακτηριστικά ευκολίας χρήσης. +TODO: add tasks for serve (front and contracts) thru IPFS, upgradability diff --git a/chapters/4.application-implementation/4.0.application-implementation.tex b/chapters/4.application-implementation/4.0.application-implementation.tex index f75b58c..25f3cd3 100644 --- a/chapters/4.application-implementation/4.0.application-implementation.tex +++ b/chapters/4.application-implementation/4.0.application-implementation.tex @@ -1,6 +1,7 @@ \chapter{Υλοποίηση εφαρμογής}\label{chapter:4-application-implementation} -\input{chapters/4.application-implementation/4.1.implemented-parts} -\input{chapters/4.application-implementation/4.2.implementation-methodology} -\input{chapters/4.application-implementation/4.3.implementation-technology-stack} -\input{chapters/4.application-implementation/4.4.implementation-architecture} +\input{chapters/4.application-implementation/4.1.implementation-methodology} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack} +\input{chapters/4.application-implementation/4.3.implementation-architecture} +\input{chapters/4.application-implementation/4.4.problems-faced} +\input{chapters/4.application-implementation/4.5.implemented-parts} diff --git a/chapters/4.application-implementation/4.1.implementation-methodology.tex b/chapters/4.application-implementation/4.1.implementation-methodology.tex new file mode 100644 index 0000000..985407d --- /dev/null +++ b/chapters/4.application-implementation/4.1.implementation-methodology.tex @@ -0,0 +1,60 @@ +\section{Μεθοδολογία υλοποίησης} \label{subsection:4-1-implementation-methodology} + +Για την επίτευξη των στόχων που ορίστηκαν και την οργάνωση της εργασίας που απαιτείται σε διαχειρίσιμα μέρη, σχεδιάστηκε η χρήση διάφορων εργαλείων και μεθόδων ανάπτυξης λογισμικού, όπως το σύστημα ελέγχου εκδόσεων (version control system) Git, η μέθοδος οργάνωσης Scrum και οι διαδικασίες ανάπτυξης DevOps. Τα εργαλεία αυτά είναι δοκιμασμένα και έχουν εδραιωθεί στη σύγχρονη ανάπτυξη λογισμικού. + +Μέσα από την χρήση των παραπάνω εργαλείων επιτυγχάνεται η ομαλή συνεργασία στην ανάπτυξη του λογισμικού. Κάθε μέλος της ομάδας δύναται να εργαστεί ανεξάρτητα και χωρίς την ανάγκη διαρκούς επικοινωνίας με τα υπόλοιπα μέλη. Οι στόχοι είναι ορισμένοι, σαφείς και χωρισμένοι σε διαχειρίσιμα μέρη τα οποία δεν καταβάλουν τα μέλη. Ταυτόχρονα, έχοντας ως έδρα καθιερωμένα πρότυπα ανάπτυξης, παρέχεται φορμαλισμός και έτοιμες μέθοδοι επίλυσης προβλημάτων, γεγονός που λειτουργεί καταλυτικά και βοηθά στην αποφυγή τελμάτων κατά τη συγγραφή του κώδικα. + +Το Git είναι δωρεάν λογισμικό ανοιχτού κώδικα το οποίο επιτρέπει και επικουρεί την απρόσκοπτη ανάπτυξη λογισμικού από πολλαπλά μέλη μίας ομάδας, ταυτόχρονα και διανεμημένα. Αυτό επιτυγχάνεται παρέχοντας ένα πλαίσιο από εργαλεία τα οποία βοηθούν την διαχείριση και ενσωμάτωση των διαφορετικών εκδόσεων του κώδικα τις οποίες αναπτύσσει κάθε μέλος της ομάδας ξεχωριστά. Υπάρχουν διάφορα μοντέλα χρήσης του Git και πιο συγκεκριμένα της δυνατότητας που δίνει για δημιουργία, ανάπτυξη και ένωση (merge) κλαδιών (branches). + +Για τους σκοπούς της παρούσας διπλωματικής χρησιμοποιήθηκε το μοντέλο GitHub flow\cite{4.1-github-flow}. Το μοντέλο αυτό ορίζει ότι κάθε προγραμματιστής ανοίγει ένα νέο branch για τη ανάπτυξη ενός χαρακτηριστικού της εφαρμογής ή τη διόρθωση ενός μέρους του κώδικα. Έπειτα, όταν η δουλειά έχει ολοκληρωθεί, δημιουργείται ένα αίτημα ένωσης (pull request) με το βασικό κλαδί ανάπτυξης (develop) της εφαρμογής. Η δουλειά υπόκειται σε αξιολόγηση από την υπόλοιπη ομάδα (review) και όταν κριθεί ότι ικανοποιεί τις ανάγκες του έργου, το branch γίνεται merge με το develop. Όταν το develop φτάσει σε ικανό σημείο σταθερότητας και αλλαγών, γίνεται merge με το branch παραγωγής (master). Από το master δημιουργούνται οι τελικές εκδόσεις της εφαρμογής οι οποίες διανέμονται για χρήση στην παραγωγή (production versions), ενώ από το develop δημιουργούνται οι δοκιμαστικές εκδόσεις αιχμής της εφαρμογής οι οποίες χρησιμοποιούνται κατά τον έλεγχο (staging versions). + +Το Scrum είναι μία μέθοδος οργάνωσης στην οποία ο επιμελητής του Scrum (Scrum master) διαχωρίζει τα ανεξάρτητα μέρη εργασίας (tasks) που πρέπει να υλοποιηθούν για την ολοκλήρωση των στόχων ενός project. Τα μέρη αυτά περιγράφονται αναλυτικά μαζί με τις απαιτήσεις τους και κατατίθενται σε μία λίστα εργασιών (backlog). Έπειτα, μέσα από συσκέψεις (meetings), επιλέγεται ένας αριθμός από tasks τα οποία ορίζουν το επόμενο προγραμματιστικό κύκλο (sprint). Κάθε task ανατίθεται σε κάποιο μέλος για υλοποίηση. Για το Sprint ορίζεται μία χρονική διάρκεια, στόχος της οποίας είναι η περάτωση όλων των tasks πριν τη λήξη της. Στο τέλος της προθεσμίας που ορίστηκε για το Sprint τα μέλη της ομάδας αποτιμούν τα αποτελέσματα και ορίζουν το επόμενο Sprint. Η διαδικασία επαναλαμβάνεται έως ότου το έργο ολοκληρωθεί. + +Λόγω του πολύ μικρού μεγέθους της ομάδας, το Scrum ακολουθήθηκε ελαστικά. Συγκεκριμένα, δεν ορίστηκε ένας συγκεκριμένος επιμελητής του board αλλά κάθε μέλος της ομάδας φρόντιζε για τον ορισμό και την περιγραφή ενός μέρους των tasks. Τα sprints δεν ήταν συνεχόμενα και δεν είχαν πάντα τον ίδιο χρόνο εκτέλεσης αλλά προσαρμόζονταν ανάλογα με τις εκάστοτε ανάγκες και τον χρόνο των μελών. Κατά βάση, χρησιμοποιήθηκε η μέθοδος Kanban (που χρησιμοποιείται από το ίδιο το Scrum), για την οπτικοποίηση των tasks. Τα tasks χωρίστηκαν σε λίστες οι οποίες περιλαμβάνουν: + +\begin{itemize} + \item σε αναμονή (backlog), περιλαμβάνει tasks τα οποία δεν έχουν ακόμα εισαχθεί σε κάποιο sprint + \item ενεργό sprint (sprint/todo), περιλαμβάνει tasks τα οποία συμμετέχουν στο ενεργό (τωρινό) sprint + \item εκτέλεση (in progress/doing), περιλαμβάνει tasks για τα οποία έχει ξεκινήσει η ανάπτυξη από κάποιο μέλος της ομάδας + \item έλεγχος και αξιολόγησης (testing/code review), περιλαμβάνει tasks των οποίων η ανάπτυξη έχει ολοκληρωθεί και βρίσκονται στο στάδιο ελέγχου (testing) ή αναμονής σε pull request + \item ολοκλήρωση (done), περιλαμβάνει tasks τα οποία έχουν τελειώσει, δηλαδή των οποίων η ανάπτυξη έχει ολοκληρωθεί και το pull request έχει γίνει merge +\end{itemize} + +Τέλος, ορίστηκαν στις λίστες οι μέγιστοι αριθμοί tasks που μπορούν τα υπάρχουν σε κάθε χρονική στιγμή. Για παράδειγμα, μέχρι τέσσερα tasks στην λίστα εκτέλεσης. Αυτό έγινε για ενθάρρυνση της ολοκλήρωσης των tasks από τα μέλη, σε αντίθεση με την εγκατάλειψή τους σε ημιτελή κατάσταση της ανάπτυξης για την ανάληψη κάποιου νέου task. + +\begin{figure}[H] + \centering + \includegraphics[width=.8\textwidth]{assets/figures/chapter-4/4.1.implementation-methodology-kanban.png} + \caption{Στιγμιότυπο οθόνης της διαδικτυακής υπηρεσίας Trello που χρησιμοποιήθηκε για την υλοποίηση του Scrum} + \label{figure:4.1.implementation-methodology-kanban} +\end{figure} + +Κατά την διαδικασία της ανάπτυξης του κώδικα, εφαρμόστηκαν επίσης οι τακτικές που ορίζονται από το DevOps σε ό,τι αφορά το deployment των υπηρεσιών. Το DevOps ορίζει διάφορα εργαλεία που αποσκοπούν στην απρόσκοπτη, αυτοματοποιημένη και γρήγορα ενσωμάτωση του κώδικα από το στάδιο της συγγραφής μέχρι την ολοκλήρωση και εγκατάσταση. Τα εργαλεία που χρησιμοποιήθηκαν εδώ είναι: + +\begin{itemize} + \item συνεχής έλεγχος (continuous testing) + \item συνεχής ολοκλήρωση (continuous integration) + \item συνεχής παράδοση (continuous delivery) + \item συνεχής εγκατάσταση (continuous deployment) +\end{itemize} + +Για την υλοποίηση των τακτικών αυτών επιλέχθηκε μετά από εκτενή έρευνα η πλατφόρμα Jenkins. Το Jenkins συνδυάστηκε με την πλατφόρμα εικονοποίησης Docker ώστε να ακολουθηθούν οι τελευταίες ενδεδειγμένες πρακτικές της βιομηχανίας. Έγινε συγγραφή του αρχείου Jenkinsfile το οποίο περιγράφει με κώδικα την ροή εργασιών (pipeline) που πρέπει να ακολουθηθεί μετά από κάθε αλλαγή στον κώδικα. Η εκτέλεση του pipeline πραγματοποιείται αυτόματα από το Jenkins. + +Το pipeline αποτελείται από στάδια και βήματα τα οποία φαίνονται στο σχήμα \ref{figure:4.1.implementation-methodology-jenkins-pipeline}: + +\begin{enumerate} + \item Αρχικά εκτελείται το βήμα "Version", το οποίο συλλέγει στοιχεία σχετικά με την εκτέλεση του pipeline όπως το κλαδί του κώδικα που πυροδότησε τη ροή και ποια από τα πακέτα λογισμικού που περιλαμβάνονται στο git repository περιέχουν αλλαγές. + \item Έπειτα εκτελείται το στάδιο "TEST" το οποίο περιέχει δύο βήματα που εκτελούνται παράλληλα και πραγματοποιούν έλεγχο του κώδικα των πακέτων. + \item Αν το κλαδί πυροδότησης είναι ένα feature branch η ροή σταματά εδώ, ενώ αν πρόκειται για ένα από τα βασικά κλαδιά (master ή develop) τότε η ροή συνεχίζει με το στάδιο "BUILD" στο οποίο εκτελούνται παράλληλα τα βήματα που χτίζουν τα docker images των πακέτων εκείνων τα οποία περιέχουν αλλαγές. + \item Στο στάδιο "PUBLISH", αν το κλαδί πυροδότησης είναι το κύριο κλαδί παραγωγής (master), τότε εκτελούνται παράλληλα βήματα τα οποία δημοσιεύουν τα docker images που δημιουργήθηκαν στο αποθετήριο Dockerhub. + \item Τέλος, εκτελείται το στάδιο "DEPLOY", κατά το οποίο πραγματοποιείται η εγκατάσταση των υπηρεσιών στο ανάλογο περιβάλλον, staging για το κλαδί develop και production για το κλαδί master. +\end{enumerate} + +\begin{figure}[H] + \centering + \includegraphics[width=.8\textwidth]{assets/figures/chapter-4/4.1.implementation-methodology-jenkins-pipeline.png} + \caption{Διάγραμμα ροής εργασιών Jenkins} + \label{figure:4.1.implementation-methodology-jenkins-pipeline} +\end{figure} + +Με την χρήση του Jenkins αυτοματοποιείται με μεγάλη ευκολία ένα σημαντικό μέρος των διαδικασιών ανάπτυξης και δημοσίευσης του κώδικα. Με την χρήση του συγκεκριμένου pipeline γίνεται σίγουρο ό,τι σε κάθε αλλαγή, ασχέτως του κλαδιού ανάπτυξης ο κώδικας ελέγχεται και τα αποτελέσματα των tests είναι αποθηκευμένα και διαθέσιμα για ανάλυση. Ακόμα, για το κλαδί develop, αυτοματοποιείται η ολοκλήρωση των πακέτων και η εγκατάστασή τους σε περιβάλλον δοκιμής (staging), γεγονός που διευκολύνει σημαντικά τις συλλογικές δοκιμές από την ομάδα σε διαφορετικά περιβάλλοντα χρήσης (browsers). Τέλος, για το κλαδί master, αυτοματοποιείται η διαδικασία δημοσίευσης των docker images, μηδενίζοντας έτσι τον χρόνο που πρέπει να καταβάλουν τα μέλη της ομάδας σε αυτό. diff --git a/chapters/4.application-implementation/4.1.implemented-parts.tex b/chapters/4.application-implementation/4.1.implemented-parts.tex deleted file mode 100644 index 28bb858..0000000 --- a/chapters/4.application-implementation/4.1.implemented-parts.tex +++ /dev/null @@ -1,6 +0,0 @@ -\section{Χαρακτηριστικά που υλοποιήθηκαν} - -TODO: move to last, add diagram with colors -TODO: add references to use cases implemented with screenshots of application -TODO: add unimplemented parts like serve (front and contracts) thru IPFS, upgradability -TODO: add differences in architecture diff --git a/chapters/4.application-implementation/4.2.implementation-methodology.tex b/chapters/4.application-implementation/4.2.implementation-methodology.tex deleted file mode 100644 index 42fa615..0000000 --- a/chapters/4.application-implementation/4.2.implementation-methodology.tex +++ /dev/null @@ -1,11 +0,0 @@ -\section{Μεθοδολογία υλοποίησης} - -Για την επίτευξη των στόχων που ορίστηκαν και την οργάνωση της εργασίας που απαιτείται σε διαχειρίσιμα μέρη, σχεδιάστηκε η χρήση διάφορων εργαλείων και μεθόδων ανάπτυξης λογισμικού, όπως το σύστημα ελέγχου εκδόσεων (version control system) Git και η μέθοδος οργάνωσης Scrum. Τα εργαλεία αυτά είναι δοκιμασμένα και έχουν εδραιωθεί στη σύγχρονη ανάπτυξη λογισμικού. - -Το Git είναι δωρεάν λογισμικό ανοιχτού κώδικα το οποίο επιτρέπει και επικουρεί την απρόσκοπτη ανάπτυξη λογισμικού από πολλαπλά μέλη μίας ομάδας, ταυτόχρονα και διανεμημένα. Αυτό επιτυγχάνεται παρέχοντας ένα πλαίσιο από εργαλεία τα οποία βοηθούν την διαχείριση και ενσωμάτωση των διαφορετικών εκδόσεων του κώδικα τις οποίες αναπτύσσει κάθε μέλος της ομάδας ξεχωριστά. Υπάρχουν διάφορα μοντέλα χρήσης του Git και πιο συγκεκριμένα της δυνατότητας που δίνει για δημιουργία, ανάπτυξη και ένωση κλαδιών (branches). Για τους σκοπούς της παρούσας διπλωματικής χρησιμοποιήθηκε το μοντέλο GitHub flow\cite{4.2-github-flow}. Το μοντέλο αυτό ορίζει ότι κάθε προγραμματιστής θα ανοίγει ένα νέο branch για τη ανάπτυξη ενός νέου χαρακτηριστικού της εφαρμογής ή τη διόρθωση ενός μέρους του κώδικα. Έπειτα, όταν η δουλειά έχει ολοκληρωθεί, το branch ενώνεται (merge) με το βασικό branch της εφαρμογής. - -Το Scrum είναι μία μέθοδος οργάνωσης στην οποία ο επιμελητής του Scrum (Scrum master) διαχωρίζει τα ανεξάρτητα μέρη εργασίας (tasks) που πρέπει να υλοποιηθούν για την ολοκλήρωση των στόχων ενός project. Τα μέρη αυτά περιγράφονται αναλυτικά μαζί με τις απαιτήσεις τους και κατατίθενται σε μία λίστα εργασιών (backlog). Έπειτα, μέσα από συσκέψεις (meetings), επιλέγεται ένας αριθμός από μέρη εργασίας τα οποία θα αποτελέσουν το επόμενο Sprint. Κάθε μέρος εργασίας ανατίθεται σε κάποιο μέλος για υλοποίηση και ορίζεται για το Sprint μία χρονική διάρκεια, στόχος της οποίας είναι η περάτωση όλων των μερών εργασίας πριν τη λήξη της. Στο τέλος προθεσμίας που ορίστηκε για το Sprint τα μέλη της ομάδας αποτιμούν τα αποτελέσματα και ορίζουν το επόμενο Sprint. Η διαδικασία επαναλαμβάνεται έως ότου το έργο ολοκληρωθεί. - -Μέσα από την χρήση των παραπάνω εργαλείων επιτυγχάνεται η ομαλή συνεργασία στην ανάπτυξη του λογισμικού. Κάθε μέλος της ομάδας δύναται να εργαστεί ανεξάρτητα και χωρίς την ανάγκη διαρκούς επικοινωνίας με τα υπόλοιπα μέλη. Οι στόχοι είναι ορισμένοι, σαφείς και χωρισμένοι σε διαχειρίσιμα μέρη τα οποία δεν καταβάλουν τα μέλη. Ταυτόχρονα, έχοντας ως έδρα καθιερωμένα πρότυπα ανάπτυξης, παρέχεται φορμαλισμός και έτοιμες μέθοδοι επίλυσης προβλημάτων, γεγονός που λειτουργεί καταλυτικά και βοηθά στην αποφυγή τελμάτων κατά τη συγγραφή του κώδικα. - -TODO: add continuous integration diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack.tex new file mode 100644 index 0000000..78e99a7 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack.tex @@ -0,0 +1,8 @@ +\section{Τεχνολογίες υλοποίησης} \label{subsection:4-2-implementation-technology-stack} + +Η παρούσα ενότητα απαρτίζεται από υποενότητες, στις οποίες διατυπώνονται οι \textbf{σημαντικότερες} τεχνολογίες που χρησιμοποιήθηκαν για την υλοποίηση της εφαρμογής. Όλες οι τεχνολογίες αποτελούν δωρεάν λογισμικό ανοιχτού κώδικα. + +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies} diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies.tex new file mode 100644 index 0000000..cf35e8d --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies.tex @@ -0,0 +1,9 @@ +\subsection{Τεχνολογίες σχετικές με το development} + +Σε αυτήν την υποενότητα περιγράφονται ορισμένα θεμελιώδη εργαλεία και frameworks που συνετέλεσαν στην ανάπτυξη της εφαρμογής. + +%TODO: Add janus and build steps diagram + +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.1.node.js} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.2.docker} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.3.jenkins} diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.1.node.js.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.1.node.js.tex new file mode 100644 index 0000000..289dfe2 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.1.node.js.tex @@ -0,0 +1,9 @@ +\subsubsection{Node.js} \label{subsection:4-2-1-1-node.js} + +\logo{chapter-4/4.2.node.js-logo}{Node.js logo} + +Το Node.js\footnote{\url{https://nodejs.org/}} είναι ένα περιβάλλον χρόνου εκτέλεσης Javascript πολλαπλών πλατφορμών, το οποίο εκτελείται στη μηχανή V8\footnote{\url{https://v8.dev/}} και παρέχει τη δυνατότητα εκτέλεσης κώδικα Javascript εκτός περιηγητών ιστού. Επιτρέπει στους προγραμματιστές να χρησιμοποιούν Javascript για τη σύνταξη εργαλείων γραμμής εντολών και τη δημιουργία κλιμακωτών διαδικτυακών εφαρμογών (κυρίως για εξυπηρετητές). Έχει αρχιτεκτονική βασισμένη σε συμβάντα (event-driven architecture), με δυνατότητα ασύγχρονης εισόδου/εξόδου (asynchronous I/O).\cite{4.2-node.js} + +Ένα από τα σημαντικότερα χαρακτηριστικά του Node.js είναι ο ενσωματωμένος διαχειριστής πακέτων του, ο οποίος ονομάζεται npm. Με τον npm γίνεται εφικτή η εγκατάσταση πακέτων (βιβλιοθηκών) από το μητρώο npm (npm registry\footnote{\url{https://www.npmjs.com/}}), καθώς και η οργάνωση και η διαχείρισή τους στα πλαίσια της ανάπτυξης μίας εφαρμογής που εξαρτάται από αυτά. + +Το Node.js έχει το αποθετήριό του στο GitHub (\url{https://github.com/nodejs/node}). \ No newline at end of file diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.2.docker.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.2.docker.tex new file mode 100644 index 0000000..f99936c --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.2.docker.tex @@ -0,0 +1,15 @@ +\subsubsection{Docker} \label{subsection:4-2-1-2-docker} + +\logo{chapter-4/4.2.docker-logo}{Docker logo} + +Το Docker αποτελεί μία πλατφόρμα η οποία παρέχει λογισμικό εικονοποίησης (virtualization) στο επίπεδο του λειτουργικού συστήματος καθώς και ολοκληρωμένα συστήματα διαμοιρασμού και εκτέλεσης των παραγόμενων εικόνων. + +Δίνει την δυνατότητα σύνθεσης εικονικών περιβαλλόντων λειτουργικού συστήματος τα οποία ονομάζονται εικόνες (images). Μέσα στις εικόνες είναι δυνατή η εκτέλεση προγραμμάτων σε ασφαλή, απομονωμένα και προβλέψιμα περιβάλλοντα τα οποία εγγυούνται τις ίδιες συνθήκες εκτέλεσης παντού. Έτσι, οι προγραμματιστές δεν χρειάζεται να ανησυχούν για το περιβάλλον εκτέλεσης του κώδικα και την ρύθμιση των παραμέτρων σε κάθε ξεχωριστή εγκατάσταση. + +Ταυτόχρονα, η πλατφόρμα του Docker παρέχει συστήματα και τυποποιημένες μεθόδους για το πακετάρισμα των εικόνων, την μεταφόρτωση και την εκτέλεσή τους σε απομακρυσμένα συστήματα. Με αυτό τον τρόπο αποτελεί πολύτιμο εργαλείο το οποίο έχει γίνει το στάνταρ στη βιομηχανία λογισμικού για τον διαμοιρασμό και την εγκατάσταση ολοκληρωμένων εφαρμογών σε περιβάλλοντα δοκιμής (staging environments) και παραγωγής (production environment). + +Τέλος, η δυνατότητα τοπικής εκτέλεσης των εικόνων στο σύστημα ανάπτυξης του κώδικα δίνει την ευκαιρία ελέγχου (testing) και αποσφαλμάτωσης (debug) τοπικά σε ένα περιβάλλον ίδιο με αυτό της εκτέλεσης. Αυτό είναι εξαιρετικά σημαντικό επειδή αποκλείει τυχών μεταβολές στην πορεία εκτέλεσης του προγράμματος που μπορεί να έρχονταν από την εκτέλεση σε ένα διαφορετικό περιβάλλον. + +% example citations +% Merkel, Dirk. “Docker: Lightweight Linux Containers for Consistent Development and Deployment.” Linux Journal, vol. 2014, no. 239, 2014, p. 2. +% Anderson, Charles. “Docker [Software Engineering].” IEEE Software, vol. 32, no. 3, 2015. diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.3.jenkins.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.3.jenkins.tex new file mode 100644 index 0000000..92fd81f --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.1.development-technologies/4.2.1.3.jenkins.tex @@ -0,0 +1,14 @@ +\subsubsection{Jenkins} \label{subsection:4-2-1-3-jenkins} + +\logo{chapter-4/4.2.jenkins-logo}{Jenkins logo} + +Το Jenkins είναι ένας πλήρως παραμετροποιήσιμος και επεκτάσιμος διακομιστής αυτοματοποίησης (automation server). Ο διακομιστής μπορεί να αυτοματοποιήσει τις διαδικασίες ελέγχου, ολοκλήρωσης, παράδοσης και εγκατάστασης του κώδικα, υλοποιώντας έτσι βασικές διαδικασίες που ορίζει το DevOps, συνεχή έλεγχο (continuous testing), συνεχή ολοκλήρωση (continuous integration), συνεχή παράδοση (continuous delivery) και συνεχή εγκατάσταση (continuous deployment). Επίσης, το Jenkins μπορεί να παραμετροποιηθεί μέσω των ρυθμίσεων που προσφέρει και των επεκτάσεων (plugins) που υπάρχουν ώστε να παρέχει τις δυνατότητες αυτές για οποιαδήποτε πλατφόρμα, γλώσσα και περιβάλλον ανάπτυξης. + +Στο Jenkins είναι δυνατός ο ορισμός με χρήση κώδικα (σε Groovy και στο DSL που παρέχεται από το Jenkins) πολλαπλών γραμμών εργασιών (pipeline). Οι γραμμές εργασιών συντίθενται από πολλαπλά βήματα τα οποία επιτελούν ξεχωριστούς στόχους προς το τελικό αποτέλεσμα της γραμμής. Τα βήματα μπορούν να τρέχουν σειριακά ή παράλληλα. Ενώ δίνεται η δυνατότητα εκτέλεσης σε πολλαπλά, διανεμημένα συστήματα καθώς και άλλες προχωρημένες λειτουργικότητες. + +Το Jenkins συνδυάζεται αποτελεσματικά με την πλατφόρμα του Docker που περιγράφηκε προηγουμένως. Μέσω του συνδυασμού δίνεται η ευκαιρία της αυτοματοποίησης του μεγαλύτερου μέρους του DevOps σε ένα απολύτως προβλέψιμο περιβάλλον το οποίο παραμένει σταθερό από την ανάπτυξη του κώδικα μέχρι την τελική εγκατάσταση. Με αυτή την μέθοδο βελτιώνεται σημαντικά η αποτελεσματικότητα των ομάδων ανάπτυξης κώδικα. + +% example citations +% Shahin, Mojtaba, et al. “Continuous Integration, Delivery and Deployment: A Systematic Review on Approaches, Tools, Challenges and Practices.” IEEE Access, vol. 5, 2017, pp. 3909–3943. +% Meyer, Mathias. “Continuous Integration and Its Tools.” IEEE Software, vol. 31, no. 3, 2014, pp. 14–16. +% Virmani, Manish. “Understanding DevOps & Bridging the Gap from Continuous Integration to Continuous Delivery.” Fifth International Conference on the Innovative Computing Technology (INTECH 2015), 2015, pp. 78–82. diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies.tex new file mode 100644 index 0000000..4bbea95 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies.tex @@ -0,0 +1,9 @@ +\subsection{Τεχνολογίες σχετικές με το UI} + +Στην παρούσα υποενότητα περιγράφονται όσες τεχνολογίες σχετίζονται με τη διεπαφή του χρήστη (UI), δηλαδή με το Presentation tier. + +% TODO: add technologies like redux, sagas + +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.1.react} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.2.redux} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.3.redux-saga} \ No newline at end of file diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.1.react.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.1.react.tex new file mode 100644 index 0000000..da0aa74 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.1.react.tex @@ -0,0 +1,11 @@ +\subsubsection{React} \label{subsection:4-2-2-1-react} + +\logo{chapter-4/4.2.react-logo}{React logo} + +Η React\footnote{\url{https://reactjs.org/}} αποτελεί βιβλιοθήκη Javascript, η οποία χρησιμοποιείται για την κατασκευή διεπαφών χρήστη. Είναι δηλωτική (declarative) και βασίζεται σε components, τα οποία διαχειρίζονται την κατάστασή τους (state) και συντίθενται για να δημιουργήσουν πολύπλοκα διαδραστικά UIs. + +%TODO: When https://2021.stateofjs.com/en-US/ is available, add to the paragraph above that is the most popular js front-end framework (by usage), according to https://2020.stateofjs.com/en-US/technologies/front-end-frameworks/ and also add this beautiful chart. + +Ένα σημαντικό εργαλείο για την ταχεία ανάπτυξη web εφαρμογών σε React είναι το Create React App\footnote{\url{https://create-react-app.dev/}}. Με τη χρήση μίας και μόνο εντολής (\texttt{npx create-react-app my-app}), εγκαθίσταται αυτόματα ένας development server σε περιβάλλον Node.js (ως μία μοναδική βιβλιοθήκη). Αυτός εμπεριέχει μία πληθώρα από build tools (π.χ. Webpack, Babel, ESLint), τα οποία προσφέρουν ισχυρές δυνατότητες, όπως άμεσα reloads και παραγωγή βελτιστοποιημένων bundles. Έτσι, η διαδικασία της υλοποίησης αποκτά ποικίλες διευκολύνσεις, χωρίς να απαιτεί την εκμάθηση, την χειροκίνητη εγκατάσταση και την προηγμένη διαμόρφωση των τεχνολογιών στο εσωτερικό. + +Η React έχει το αποθετήριό της στο GitHub (\url{https://github.com/facebook/react/}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/react}). diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.2.redux.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.2.redux.tex new file mode 100644 index 0000000..0855fed --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.2.redux.tex @@ -0,0 +1,27 @@ +\subsubsection{Redux} \label{subsection:4-2-2-1-redux} + +\logo{chapter-4/4.2.redux-logo}{Redux logo} + +Το Redux\footnote{\url{https://redux.js.org/}} αποτελεί μία βιβλιοθήκη Javascript, η χρήση της οποίας προσφέρει στην εφαρμογή ένα πλήρως διαχειρίσιμο global state. + +%TODO: When https://2021.stateofjs.com/en-US/ is available, add to the paragraph above that is the most popular data layer technology (by usage), according to https://2020.stateofjs.com/en-US/technologies/datalayer/ and also add this beautiful chart. + + +Τα δομικά στοιχεία του Redux είναι τα εξής: +\begin{itemize} + \item \textbf{Actions}: Αντικείμενα τα οποία περιέχουν νέα πληροφορία για την τροποποίηση του state της εφαρμογής. + \item \textbf{Reducers}: Συναρτήσεις οι οποίες λαμβάνοντας ένα action και διαβάζοντας το τρέχον state, εφαρμόζουν κάποια λογική για την παραγωγή ενός νέου state. + \item \textbf{Store}: Το αντικείμενο στο οποίο βρίσκεται αποθηκευμένο το state της εφαρμογής. Η βασική ιδιότητα του state είναι ότι παραμένει αμετάβλητο και, για την ανανέωσή του, παράγεται πάντα ένα νέο state object μέσω των reducer. + \item \textbf{Middleware}: Προαιρετικά κομμάτια κώδικα που λαμβάνουν actions πριν εκείνα φτάσουν στους reducers και εκτελούν κάποιο side effect. Συνήθως χρησιμοποιούνται για ενέργειες όπως logging και error reporting ή για να ενώσουν το Redux με εξωτερικά APIs. +\end{itemize} + +Αν και το ίδιο το Redux είναι μικροσκοπικό σε μέγεθος, ο τρόπος υλοποίησής του έχει επιτρέψει τη δημιουργία ενός τεράστιου οικοσυστήματος εργαλείων και επεκτάσεων, τα οποία συνδέονται μαζί του ή βασίζονται σε αυτό. Για παράδειγμα, μία από τις κύριες χρήσεις του είναι η κατασκευή διεπαφών χρήστη σε συνδύασμό με άλλες βιβλιοθήκες, όπως με την React. Σε αυτήν την περίπτωση, συνδέεται μαζί της με το npm πακέτο \texttt{react-redux} και η λειτουργία του υπό ανάπτυξη UI προκύπτει ως εξής: + +%TODO: Add proper diagram +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{assets/figures/chapter-4/4.2.react-redux} + \caption{Λειτουργία του Redux σε συνδυασμό με React} +\end{figure} + +Το Redux έχει το αποθετήριό του στο GitHub (\url{https://github.com/reduxjs/redux}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/redux}). diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.3.redux-saga.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.3.redux-saga.tex new file mode 100644 index 0000000..d5e4838 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.2.ui-technologies/4.2.2.3.redux-saga.tex @@ -0,0 +1,7 @@ +\subsubsection{Redux-Saga} \label{subsection:4-2-2-3-redux-saga} + +\logo{chapter-4/4.2.redux-saga-logo}{Redux-Saga logo} + +Το Redux-Saga\footnote{\url{https://redux.js.org/}} αποτελεί μία βιβλιοθήκη Javascript του οικοσυστήματος του Redux. Πρόκειται για ένα Redux middleware, το οποίο χρησιμοποιεί ESG generator functions\footnote{\url{https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*}} για την εκτέλεση και διαχείριση ποικίλων ασύγχρονων side effect. Αυτές οι συναρτήσεις (sagas) παρέχουν μία πληθώρα επιλογών για την παράλληλη εκτέλεση κώδικα που μπορεί να σχετίζεται με εξωτερικά APIs, όπως με ένα blockchain ή μία βάση δεδομένων. Με αυτόν τον τρόπο, τα τελευταία μπορούν να συμπεριληφθούν στο κεντρικό Redux store και τη διαχείριση του συνολικού state της εφαρμογής. + +Το Redux-Saga έχει το αποθετήριό του στο GitHub (\url{https://github.com/redux-saga/redux-saga}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/redux-saga}). diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies.tex new file mode 100644 index 0000000..52b6776 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies.tex @@ -0,0 +1,6 @@ +\subsection{Τεχνολογίες σχετικές με το Ethereum} \label{subsection:4-2-3-ethereum-technologies} + +Στην παρούσα υποενότητα περιγράφονται εκείνες οι τεχνολογίες που σχετίζονται με το Ethereum, δηλαδή με το Application tier της τεχνολογικής στοίβας. + +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.1.truffle} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.2.ganache} diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.1.truffle.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.1.truffle.tex new file mode 100644 index 0000000..40bcc51 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.1.truffle.tex @@ -0,0 +1,11 @@ +\subsubsection{Truffle} \label{subsection:4-2-3-1-truffle} + +\logo{chapter-4/4.2.truffle-logo}{Truffle logo} + +Το Truffle\footnote{\url{https://trufflesuite.com/truffle/}} είναι ένα από τα δημοφιλέστερα Ethereum development frameworks και αποτελεί τμήμα της σουίτας Truffle. + +Μέσω του Truffle πραγματοποιείται η διαχείριση των έξυπνων συμβολαίων. Αυτή περιλαμβάνει τη δοκιμή, τη σύνδεση και τη μεταγλώττισή τους, καθώς και την ανάπτυξη τους στο blockchain. + +Επίσης, το Truffle περιέχει πρόσθετα σχετικά εργαλεία, όπως διαδραστική κονσόλα για άμεση αλληλεπίδραση με τα contracts και εκτελεστής εξωτερικών σεναρίων (external script runner). + +Έχει το αποθετήριό του στο GitHub (\url{https://github.com/trufflesuite/truffle}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/truffle}). \ No newline at end of file diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.2.ganache.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.2.ganache.tex new file mode 100644 index 0000000..9c87174 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.3.ethereum-technologies/4.2.3.2.ganache.tex @@ -0,0 +1,21 @@ +\subsubsection{Ganache} \label{subsection:4-2-3-2-ganache} + +\logo{chapter-4/4.2.ganache-logo}{Ganache logo} + +Το Ganache\footnote{\url{https://trufflesuite.com/ganache/}} είναι ένα λογισμικό που παρέχει ένα βοηθητικό προσωπικό Ethereum blockchain για ταχεία ανάπτυξη αποκεντρωμένων εφαρμογών και αποτελεί επίσης τμήμα της σουίτας Truffle. Διατίθεται τόσο ως desktop εφαρμογή με UI, όσο και ως CLI (command-line interface). + +To Ganache παρέχει ισχυρά εργαλεία για την ανάπτυξη έξυπνων συμβολαίων, όπως: +\begin{itemize} + \item Block explorer, μέσω του οποίου μπορούν να εξεταστούν λεπτομερώς όλα τα blocks και οι συναλλαγές που έλαβαν χώρα. + \item Εξρεύνηση των εσωτερικών των contracts και των πυροδοτημένων event τους. + \item Ενδελεχές αρχείο καταγραφής της εξόδου του blockchain, το οποίο περιλαμβάνει σημαντικές πληροφορίες για τον εντοπισμό σφαλμάτων. + \item Δυνατότητα διαμόρφωσης του χρόνου εξόρυξης των block, έτσι ώστε να αρμόζει με τις εκάστοτε ανάγκες (αυτόματη εξόρυξη ή εξόρυξη σε προσαρμοσμένο χρονικό διάστημα). +\end{itemize} + +\begin{figure}[H] + \centering + \includegraphics[width=.95\textwidth]{assets/figures/chapter-4/4.2.ganache-gui} + \caption{Ganache (desktop εφαρμογή)} +\end{figure} + +Το Ganache έχει το αποθετήριό του στο GitHub (\url{https://github.com/trufflesuite/ganache}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/ganache}). \ No newline at end of file diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies.tex new file mode 100644 index 0000000..b4c51cb --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies.tex @@ -0,0 +1,7 @@ +\subsection{Τεχνολογίες σχετικές με το IPFS} + +Σε αυτήν την υποενότητα περιγράφονται όσες τεχνολογίες σχετίζονται με το IPFS (βλ. ενότητα \ref{section:2-7-ipfs}), δηλαδή με το Data tier της τεχνολογικής στοίβας της εφαρμογής. + +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.1.js-ipfs} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.2.orbit-db} +\input{chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.3.libp2p} diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.1.js-ipfs.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.1.js-ipfs.tex new file mode 100644 index 0000000..096c59b --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.1.js-ipfs.tex @@ -0,0 +1,7 @@ +\subsubsection{js-ipfs} \label{subsection:4-2-4-1-js-ipfs} + +\logo{chapter-4/4.2.js-ipfs-logo}{js-ipfs logo} + +H υλοποίηση του IPFS που χρησιμοποείται στην εφαρμογή Concordia είναι αυτή σε Javascript και ονομάζεται js-ipfs. Μέσω αυτής της βιβλιοθήκης, παρέχεται η δυνατότητα δημιουργίας ενός IPFS κόμβου, τόσο σε έναν Node.js server, όσο και σε ένα περιβάλλον browser. + +Το js-ipfs έχει το αποθετήριό του στο GitHub (\url{https://github.com/ipfs/js-ipfs}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/ipfs}). diff --git a/chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.2.orbit-db.tex similarity index 77% rename from chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex rename to chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.2.orbit-db.tex index 4882055..6cebc57 100644 --- a/chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.2.orbit-db.tex @@ -1,14 +1,10 @@ -\subsection{OrbitDB} \label{subsection:4-3-1-orbit-db} +\subsubsection{OrbitDB} \label{subsection:4-2-4-2-orbit-db} -\begin{figure}[H] - \centering - \includegraphics[width=2cm]{assets/figures/chapter-4/4.3.orbitdb-logo.png} - \caption{OrbitDB logo} -\end{figure} +\logo{chapter-4/4.2.orbitdb-logo}{OrbitDB logo} -Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{4.3-orbitdb} +Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{4.2-orbitdb} -Κάποια Βασικά χαρακτηριστικά της είναι τα εξής: +Κάποια βασικά χαρακτηριστικά της είναι τα εξής: \begin{itemize} \item \textbf{Stores}: Η OrbitDB παρέχει διάφορους τύπους βάσεων (stores) για διαφορετικά μοντέλα δεδομένων και περιπτώσεις χρήσης: @@ -22,15 +18,17 @@ Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση. - \item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου \texttt{CID} είναι το IPFS multihash του μανιφέστου της και \texttt{DATABASE\_NAME} το όνομα της βάσης.\cite{4.3-orbitdb-guide}Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). + \item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου \texttt{CID} είναι το IPFS multihash του μανιφέστου της και \texttt{DATABASE\_NAME} το όνομα της βάσης.\cite{4.2-orbitdb-guide}Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). \item \textbf{Identity}: Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό. Η μορφή του έχει ως εξής\footnote{Βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}}: \begin{enumitemcenteredfigure} - \simplelisting[width=15cm]{orbit-db-identity.js} + \simplelisting[width=.95\textwidth]{orbit-db-identity.js} \caption{OrbitDB Identity} \end{enumitemcenteredfigure} - \item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτή μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης. + \item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα εγγραφής σε αυτή, μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης. \end{itemize} + +Η OrbitDB έχει το αποθετήριό της στο GitHub (\url{https://github.com/orbitdb/orbit-db}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/orbit-db}). diff --git a/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.3.libp2p.tex b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.3.libp2p.tex new file mode 100644 index 0000000..4b23253 --- /dev/null +++ b/chapters/4.application-implementation/4.2.implementation-technology-stack/4.2.4.ipfs-technologies/4.2.4.3.libp2p.tex @@ -0,0 +1,9 @@ +\subsubsection{Libp2p} \label{subsection:4-2-4-3-libp2p} + +\logo{chapter-4/4.2.libp2p-logo}{Libp2p logo} + +Η libp2p είναι ένα αρθρωτό σύστημα πρωτοκόλλων, προδιαγραφών και βιβλιοθηκών που επιτρέπουν την ανάπτυξη p2p εφαρμογών. Αποτελεί το υποκείμενο επίπεδο δικτύου του IPFS.\ref{2.7-ipfs-docs} + +Ένα από τα υλοποιημένα πρωτόκολλα μεταφοράς δεδομένων της libp2p είναι το libp2p-webrtc-star\footnote{\url{https://github.com/libp2p/js-libp2p-webrtc-star}}. Αποτελεί το πρωτόκολλο μεταφοράς δεδομένων της εφαρμογής, καθώς υποστηρίζεται τόσο από Node.js servers, όσο και από browsers. Περιλαμβάνει, επίσης, έναν signalling server, που επιτρέπει τη γρήγορη διασύνδεση των peers. + +Το libp2p-webrtc-star έχει το αποθετήριό του στο GitHub (\url{https://github.com/libp2p/js-libp2p-webrtc-star}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/libp2p-webrtc-star}). diff --git a/chapters/4.application-implementation/4.4.implementation-architecture.tex b/chapters/4.application-implementation/4.3.implementation-architecture.tex similarity index 94% rename from chapters/4.application-implementation/4.4.implementation-architecture.tex rename to chapters/4.application-implementation/4.3.implementation-architecture.tex index a063a19..340c7f3 100644 --- a/chapters/4.application-implementation/4.4.implementation-architecture.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture.tex @@ -1,9 +1,9 @@ -\section{Αρχιτεκτονική υλοποίησης} \label{section:4-4-implementation-architecture} +\section{Αρχιτεκτονική υλοποίησης} \label{section:4-3-implementation-architecture} Το σύστημα υλοποιήθηκε χρησιμοποιώντας το μοντέλο αρχιτεκτονικής των μικροϋπηρεσιών. Το μοντέλο των μικροϋπηρεσιών βασίζεται στην αποδόμηση του συστήματος σε μικρές μονάδες, οι οποίες συνεργάζονται ώστε να προσφέρουν ένα ενιαίο αποτέλεσμα. Η προσέγγιση αυτή έχει πολλά πλεονεκτήματα σε σύγκριση με την ανάπτυξη μονολιθικών εφαρμογών % todo: add reference . Ο βασικός λόγος για τον οποίο επιλέχθηκε η αρχιτεκτονική μικροϋπηρεσιών είναι η ευκολία που προσφέρει στη γρήγορη ανάπτυξη καινούριων χαρακτηριστικών, ταυτόχρονα από διαφορετικά μέλη μίας ομάδας, ασύγχρονα και χωρίς την ανάγκη συνεχής επικοινωνίας και συνεννόησης μεταξύ τους. Αυτό συμβαίνει επειδή κάθε μέρος του συστήματος (υπηρεσία) είναι αυτόνομο και η ανάπτυξή του είναι διαχωρισμένη από το υπόλοιπο σύστημα με το οποίο είναι αδύναμα συνδεδεμένο (loosely coupled). -Το σύστημα συντίθεται από διάφορες μικροϋπηρεσίες, κάποιες από τις οποίες αναπτύχθηκαν στα πλαίσια αυτής της εργασίας ενώ άλλες αποτελούν δωρεάν λογισμικό ανοιχτού κώδικα. Οι μικροϋπηρεσίες αυτές συνοψίζονται στον παρακάτω πίνακα (πίνακας \ref{table:4-4-microservice-summary}). +Το σύστημα συντίθεται από διάφορες μικροϋπηρεσίες, κάποιες από τις οποίες αναπτύχθηκαν στα πλαίσια αυτής της εργασίας ενώ άλλες αποτελούν δωρεάν λογισμικό ανοιχτού κώδικα. Οι μικροϋπηρεσίες αυτές συνοψίζονται στον παρακάτω πίνακα (πίνακας \ref{table:4-3-microservice-summary}). \begin{table}[H] \begin{center} @@ -21,10 +21,10 @@ \end{tabularx} \end{center} \caption{Σύντομη περιγραφή υπηρεσιών συστήματος.} - \label{table:4-4-microservice-summary} + \label{table:4-3-microservice-summary} \end{table} -Στα πλαίσια της εργασίας αναπτύχθηκαν επίσης διάφορα αρθρώματα, κυρίως με τη μορφή βιβλιοθηκών Javascript. Τα αρθρώματα χρησιμοποιούνται από τις υπηρεσίες για την επίτευξη των επιμέρους εργασιών. Η ανάπτυξη του λογισμικού σε ξεχωριστά αρθρώματα επιτρέπει την εύκολη επαναχρησιμοποίηση του κώδικα καθώς και τον διαχωρισμό των αυτόνομων τμημάτων κώδικα. Τα αρθρώματα συνοψίζονται στον παρακάτω πίνακα (πίνακας \ref{table:4-4-software-units-summary}). +Στα πλαίσια της εργασίας αναπτύχθηκαν επίσης διάφορα αρθρώματα, κυρίως με τη μορφή βιβλιοθηκών Javascript. Τα αρθρώματα χρησιμοποιούνται από τις υπηρεσίες για την επίτευξη των επιμέρους εργασιών. Η ανάπτυξη του λογισμικού σε ξεχωριστά αρθρώματα επιτρέπει την εύκολη επαναχρησιμοποίηση του κώδικα καθώς και τον διαχωρισμό των αυτόνομων τμημάτων κώδικα. Τα αρθρώματα συνοψίζονται στον παρακάτω πίνακα (πίνακας \ref{table:4-3-software-units-summary}). \begin{table}[H] \begin{center} @@ -41,22 +41,22 @@ \end{tabularx} \end{center} \caption{Σύντομη περιγραφή αρθρωμάτων συστήματος.} - \label{table:4-4-software-units-summary} + \label{table:4-3-software-units-summary} \end{table} -Τα αρθρώματα και οι υπηρεσίες θα περιγραφούν σε μεγαλύτερη ανάλυση στα επόμενα κεφάλαια. Στο παρακάτω σχήμα (σχήμα \ref{figure:4-4-architecture-overview}) φαίνεται η συνολική αρχιτεκτονική του συστήματος. +Τα αρθρώματα και οι υπηρεσίες θα περιγραφούν σε μεγαλύτερη ανάλυση στα επόμενα κεφάλαια. Στο παρακάτω σχήμα (σχήμα \ref{figure:4-3-architecture-overview}) φαίνεται η συνολική αρχιτεκτονική του συστήματος. \begin{figure}[H] \centering - \includegraphics[width=.75\textwidth]{assets/figures/chapter-4/4.4.architecture-architecture-overview.png} + \includegraphics[width=.75\textwidth]{assets/figures/chapter-4/4.3.architecture-architecture-overview.png} \caption{Διάγραμμα αρχιτεκτονικής συστήματος} - \label{figure:4-4-architecture-overview} + \label{figure:4-3-architecture-overview} \end{figure} % ===== ===== % Common software units % ===== ===== -\subsection{Αρθρώματα} \label{subsection:4-4-software-units} +\subsection{Αρθρώματα} \label{subsection:4-3-software-units} Στο κεφάλαιο αυτό θα περιγραφούν με μεγαλύτερη λεπτομέρεια τα αρθρώματα που αναπτύχθηκαν. @@ -103,12 +103,12 @@ % ===== ===== % concordia-app microservice % ===== ===== -\subsection{Concordia Application} \label{subsection:4-4-concordia-application-service} +\subsection{Concordia Application} \label{subsection:4-3-concordia-application-service} \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η εφαρμογή Concordia (Concordia Application) εκθέτει τις γραφικές διεπαφές μέσω των οποίων αλληλεπιδρούν οι χρήστες με το σύστημα. Αποτελεί τον δίαυλο επικοινωνίας του τελικού χρήστη με το blockchain και με τη βάση OrbitDB. Η αρχιτεκτονική της υπηρεσίας φαίνεται στο σχήμα \ref{figure:4-4-concordia-application-architecture}. Μέσω της εφαρμογής Concordia οι χρήστες μπορούν να: +Η εφαρμογή Concordia (Concordia Application) εκθέτει τις γραφικές διεπαφές μέσω των οποίων αλληλεπιδρούν οι χρήστες με το σύστημα. Αποτελεί τον δίαυλο επικοινωνίας του τελικού χρήστη με το blockchain και με τη βάση OrbitDB. Η αρχιτεκτονική της υπηρεσίας φαίνεται στο σχήμα \ref{figure:4-3-concordia-application-architecture}. Μέσω της εφαρμογής Concordia οι χρήστες μπορούν να: \begin{itemize} \item περιηγηθούν και διαβάσουν το περιεχόμενο της πλατφόρμας @@ -133,9 +133,9 @@ \begin{figure}[H] \centering - \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.2.concordia-application-architecture.png} + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.2.concordia-application-architecture.png} \caption{Αρχιτεκτονική υπηρεσίας Concordia Application} - \label{figure:4-4-concordia-application-architecture} + \label{figure:4-3-concordia-application-architecture} \end{figure} Για τη λειτουργία της υπηρεσία Concordia Application είναι απαραίτητα τα αντικείμενα (artifacts) που προκύπτουν από τη μεταγλώττιση των contracts και τη μεταφόρτωση/δημοσίευσή τους στο blockchain. Για την εισαγωγή των artifacts στην υπηρεσία έχουν αναπτυχθεί δύο μέθοδοι. @@ -152,18 +152,18 @@ % ===== ===== % concordia-contracts-migrator microservice % ===== ===== -\subsection{Concordia Contracts Migrator} \label{subsection:4-4-concordia-contracts-migrator} +\subsection{Concordia Contracts Migrator} \label{subsection:4-3-concordia-contracts-migrator} \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία αυτή αποτελείται από ένα εκτελέσιμο πρόγραμμα γραμμής εντολών βασισμένο στο άρθρωμα concordia-contracts που αναλύθηκε σε προηγούμενη υποενότητα (\ref{subsection:4-4-software-units}). Το πρόγραμμα, κατά την εκτέλεσή του, μεταγλωττίζει τα contracts και έπειτα τα μεταφορτώνει στο blockchain το οποίο είναι ορισμένο με χρήση μεταβλητών περιβάλλοντος. Τέλος, αν οι κατάλληλες μεταβλητές περιβάλλοντος είναι ορισμένες, το πρόγραμμα μεταφορτώνει τα τελικά artifacts σε αποθετήριο Concordia Contracts Provider. Η αρχιτεκτονική της υπηρεσίας φαίνεται στο παρακάτω σχήμα (σχήμα \ref{figure:4-4-concordia-contracts-migrator-architecture}). +Η υπηρεσία αυτή αποτελείται από ένα εκτελέσιμο πρόγραμμα γραμμής εντολών βασισμένο στο άρθρωμα concordia-contracts που αναλύθηκε σε προηγούμενη υποενότητα (\ref{subsection:4-3-software-units}). Το πρόγραμμα, κατά την εκτέλεσή του, μεταγλωττίζει τα contracts και έπειτα τα μεταφορτώνει στο blockchain το οποίο είναι ορισμένο με χρήση μεταβλητών περιβάλλοντος. Τέλος, αν οι κατάλληλες μεταβλητές περιβάλλοντος είναι ορισμένες, το πρόγραμμα μεταφορτώνει τα τελικά artifacts σε αποθετήριο Concordia Contracts Provider. Η αρχιτεκτονική της υπηρεσίας φαίνεται στο παρακάτω σχήμα (σχήμα \ref{figure:4-3-concordia-contracts-migrator-architecture}). \begin{figure}[H] \centering - \includegraphics[width=.6\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.3.concordia-contracts-migrator-architecture.png} + \includegraphics[width=.6\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.3.concordia-contracts-migrator-architecture.png} \caption{Αρχιτεκτονική υπηρεσίας Concordia Contracts Migrator} - \label{figure:4-4-concordia-contracts-migrator-architecture} + \label{figure:4-3-concordia-contracts-migrator-architecture} \end{figure} \vspace{0.5cm} @@ -174,18 +174,18 @@ % ===== ===== % concordia-pinner microservice % ===== ===== -\subsection{Concordia Pinner} \label{subsection:4-4-concordia-pinner-service} +\subsection{Concordia Pinner} \label{subsection:4-3-concordia-pinner-service} \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application) η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη στη γλώσσα προγραμματισμού Javascript. Η αρχιτεκτονική της υπηρεσίας φαίνεται το σχήμα \ref{figure:4-4-concordia-pinner-architecture}. +Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application) η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη στη γλώσσα προγραμματισμού Javascript. Η αρχιτεκτονική της υπηρεσίας φαίνεται το σχήμα \ref{figure:4-3-concordia-pinner-architecture}. \begin{figure}[H] \centering - \includegraphics[width=.6\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.4.concordia-pinner-architecture.png} + \includegraphics[width=.6\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.4.concordia-pinner-architecture.png} \caption{Αρχιτεκτονική υπηρεσίας Concordia Pinner} - \label{figure:4-4-concordia-pinner-architecture} + \label{figure:4-3-concordia-pinner-architecture} \end{figure} Η υπηρεσία αυτή υλοποιήθηκε για να εγγυηθεί η διαθεσιμότητα του περιεχομένου του συστήματος που αποθηκεύεται στο IPFS (τίτλοι θεμάτων, περιεχόμενο μηνυμάτων και άλλα). Λόγω του τρόπου λειτουργίας % todo: insert reference @@ -202,21 +202,21 @@ % ===== ===== % concordia-contracts-provider microservice % ===== ===== -\subsection{Concordia Contracts Provider} \label{subsection:4-4-concordia-contracts-provider-service} +\subsection{Concordia Contracts Provider} \label{subsection:4-3-concordia-contracts-provider-service} \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία Contracts Provider αποτελεί μία βοηθητική υπηρεσία η οποία υλοποιεί ένα απλό αποθετήριο για τα contract artifacts. Είναι γραμμένη σε Javascript και διαθέτει δύο HTTP \textenglish{endpoints}, ένα για τη μεταφόρτωση (upload) των artifacts προς την υπηρεσία και ένα για τη λήψη (download) από την υπηρεσία. Η υπηρεσία υποστηρίζει επίσης την επισύναψη ετικετών στα artifacts, όπως η έκδοση (version) ή το κλαδί ανάπτυξης (branch, για παράδειγμα \textenglish{master/develop}). Η αρχιτεκτονική της υπηρεσίας φαίνεται το σχήμα \ref{figure:4-4-concordia-contracts-provider-architecture}. +Η υπηρεσία Contracts Provider αποτελεί μία βοηθητική υπηρεσία η οποία υλοποιεί ένα απλό αποθετήριο για τα contract artifacts. Είναι γραμμένη σε Javascript και διαθέτει δύο HTTP \textenglish{endpoints}, ένα για τη μεταφόρτωση (upload) των artifacts προς την υπηρεσία και ένα για τη λήψη (download) από την υπηρεσία. Η υπηρεσία υποστηρίζει επίσης την επισύναψη ετικετών στα artifacts, όπως η έκδοση (version) ή το κλαδί ανάπτυξης (branch, για παράδειγμα \textenglish{master/develop}). Η αρχιτεκτονική της υπηρεσίας φαίνεται το σχήμα \ref{figure:4-3-concordia-contracts-provider-architecture}. \begin{figure}[H] \centering - \includegraphics[width=.6\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.5.concordia-contracts-provider-architecture.png} + \includegraphics[width=.6\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.5.concordia-contracts-provider-architecture.png} \caption{Αρχιτεκτονική υπηρεσίας Concordia Contracts Provider} - \label{figure:4-4-concordia-contracts-provider-architecture} + \label{figure:4-3-concordia-contracts-provider-architecture} \end{figure} -Η υπηρεσία χρησιμοποιείται σε μία προσπάθεια αποσύνδεσης της βασικής εφαρμογής που υλοποιεί η υπηρεσία Concordia Application από μία συγκεκριμένη έκδοση των contracts. Οι λόγοι που αυτό είναι επιθυμητό αναπτύχθηκαν στην περιγραφή της υπηρεσίας Concordia \textenglish{Application} (υποενότητα \ref{subsection:4-4-concordia-application-service}). Ωστόσο, η υπηρεσία Contracts Provider αποτελεί σημείο κεντροποίησης του συστήματος, για το λόγο αυτό θεωρείται προσωρινή λύση η οποία θα μπορούσε να αντικατασταθεί από αποκεντρωτικές λύσεις όπως η μεταφόρτωση των artifacts στο IPFS και ο διαμοιρασμός τους από εκεί. +Η υπηρεσία χρησιμοποιείται σε μία προσπάθεια αποσύνδεσης της βασικής εφαρμογής που υλοποιεί η υπηρεσία Concordia Application από μία συγκεκριμένη έκδοση των contracts. Οι λόγοι που αυτό είναι επιθυμητό αναπτύχθηκαν στην περιγραφή της υπηρεσίας Concordia \textenglish{Application} (υποενότητα \ref{subsection:4-3-concordia-application-service}). Ωστόσο, η υπηρεσία Contracts Provider αποτελεί σημείο κεντροποίησης του συστήματος, για το λόγο αυτό θεωρείται προσωρινή λύση η οποία θα μπορούσε να αντικατασταθεί από αποκεντρωτικές λύσεις όπως η μεταφόρτωση των artifacts στο IPFS και ο διαμοιρασμός τους από εκεί. \vspace{0.5cm} \textbf{Διανομή} @@ -226,7 +226,7 @@ % ===== ===== % rendezvous-ganache microservice % ===== ===== -\subsection{Ganache} \label{subsection:4-4-ganache-service} +\subsection{Ganache} \label{subsection:4-3-ganache-service} \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} @@ -241,7 +241,7 @@ % ===== ===== % rendezvous-server microservice % ===== ===== -\subsection{Rendezvous Server} \label{subsection:4-4-rendezvous-server-service} +\subsection{Rendezvous Server} \label{subsection:4-3-rendezvous-server-service} \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} @@ -256,17 +256,17 @@ % ===== ===== % microservice communication % ===== ===== -\subsection{Διασύνδεση υπηρεσιών} \label{subsection:4-4-service-communication} +\subsection{Διασύνδεση υπηρεσιών} \label{subsection:4-3-service-communication} Στο μοντέλο των μικροϋπηρεσιών, βασικό χαρακτηριστικό είναι η επικοινωνία των ξεχωριστών υπηρεσιών και η ανταλλαγή μηνυμάτων για την επίτευξη των λειτουργικοτήτων του συστήματος. Σε αυτήν την υποενότητα θα αναλυθεί ο τρόπος με τον οποίο οι μικροϋπηρεσίες επικοινωνούν μεταξύ τους καθώς και η φύση και το περιεχόμενο των μηνυμάτων που ανταλλάσουν. -Στο παρακάτω σχήμα (σχήμα \ref{figure:4-4-communications-graph}) φαίνεται ο γράφος που οπτικοποιεί τα κανάλια επικοινωνίας μεταξύ των μικροϋπηρεσιών, καθώς και τα κανάλια επικοινωνίας των μικροϋπηρεσιών με το blockchain. +Στο παρακάτω σχήμα (σχήμα \ref{figure:4-3-communications-graph}) φαίνεται ο γράφος που οπτικοποιεί τα κανάλια επικοινωνίας μεταξύ των μικροϋπηρεσιών, καθώς και τα κανάλια επικοινωνίας των μικροϋπηρεσιών με το blockchain. \begin{figure}[H] \centering - \includegraphics[width=.9\textwidth]{assets/figures/chapter-4/4.4.communications-diagram.png} + \includegraphics[width=.9\textwidth]{assets/figures/chapter-4/4.3.communications-diagram.png} \caption{Γράφος οπτικοποίησης των καναλιών επικοινωνίας των μικροϋπηρεσιών} - \label{figure:4-4-communications-graph} + \label{figure:4-3-communications-graph} \end{figure} Εδώ αναλύεται η επικοινωνία κάθε μικροϋπηρεσίας: @@ -286,7 +286,7 @@ % ===== ===== % data flow % ===== ===== -\subsection{Ροή πληροφορίας} \label{subsection:4-4-data-flow} +\subsection{Ροή πληροφορίας} \label{subsection:4-3-data-flow} Στην παρούσα υποενότητα θα αναλυθεί η ροή της πληροφορίας στο σύστημα. Λόγω των πολλαπλών υπηρεσιών, της κατάτμησης την πληροφορίας και των διαφορετικών σημείων αποθήκευσης της, η ροή της πληροφορίας στο σύστημα ακολουθεί ένα σχετικά περίπλοκο μονοπάτι (σε σχέση με κλασσικές, μονολιθικές, κεντροποιημένες εφαρμογές). @@ -296,21 +296,21 @@ Τέλος, παρακάτω δίνεται ένα παράδειγμα εισαγωγής πληροφορίας στο σύστημα και έπειτα ανάκτησης της ίδιας πληροφορίας. -Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του/της δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο τη διεύθυνση του/της δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του/της χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. Στο σχήμα \ref{figure:4-4-data-flow-insert} παρουσιάζεται γραφικά η διαδικασία. +Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του/της δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο τη διεύθυνση του/της δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του/της χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. Στο σχήμα \ref{figure:4-3-data-flow-insert} παρουσιάζεται γραφικά η διαδικασία. % todo: UML diagrams might be wrong, should the ethereum and orbitDb blocks be continuous? \begin{figure}[H] \centering - \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-insert.png} + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png} \caption{Διάγραμμα ακολουθίας δημιουργίας θέματος} - \label{figure:4-4-data-flow-insert} + \label{figure:4-3-data-flow-insert} \end{figure} -Έστω, χρήστης που επιθυμεί να διαβάσει το προηγούμενο μήνυμα. Αρχικά, πρέπει να διαβαστεί ο πίνακας θεμάτων από το blockchain. Η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του κάθε θέματος, τα οποία ανακτώνται από τις προσωπικές βάσεις Orbit κάθε χρήστη. Έπειτα, εφόσον το θέμα βρεθεί και ο αύξων αριθμός του είναι γνωστός, πρέπει να διαβαστούν από το blockchain τα μεταδομένα των μηνυμάτων του θέματος και συγκεκριμένα η διευθύνσεις των δημιουργών τους. Τέλος, μέσω του IPFS πρέπει να γίνει αντιγραφή των προσωπικών βάσεων των δημιουργών του κάθε μηνύματος και να αναζητηθούν σε αυτές τα εκάστοτε μηνύματα. Στο σχήμα \ref{figure:4-4-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα. +Έστω, χρήστης που επιθυμεί να διαβάσει το προηγούμενο μήνυμα. Αρχικά, πρέπει να διαβαστεί ο πίνακας θεμάτων από το blockchain. Η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του κάθε θέματος, τα οποία ανακτώνται από τις προσωπικές βάσεις Orbit κάθε χρήστη. Έπειτα, εφόσον το θέμα βρεθεί και ο αύξων αριθμός του είναι γνωστός, πρέπει να διαβαστούν από το blockchain τα μεταδομένα των μηνυμάτων του θέματος και συγκεκριμένα η διευθύνσεις των δημιουργών τους. Τέλος, μέσω του IPFS πρέπει να γίνει αντιγραφή των προσωπικών βάσεων των δημιουργών του κάθε μηνύματος και να αναζητηθούν σε αυτές τα εκάστοτε μηνύματα. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα. \begin{figure}[H] \centering - \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-read.png} + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png} \caption{Διάγραμμα ακολουθίας εύρεσης και ανάκτησης θέματος} - \label{figure:4-4-data-flow-read} + \label{figure:4-3-data-flow-read} \end{figure} diff --git a/chapters/4.application-implementation/4.3.implementation-technology-stack.tex b/chapters/4.application-implementation/4.3.implementation-technology-stack.tex deleted file mode 100644 index 6081f3e..0000000 --- a/chapters/4.application-implementation/4.3.implementation-technology-stack.tex +++ /dev/null @@ -1,7 +0,0 @@ -\section{Τεχνολογίες υλοποίησης} - -TODO: add ganache, truffle -TODO: add additional technologies like react, redux, sagas, express, nodejs, docker -TODO: add jenkins, janus and build steps diagram - -\input{chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex} diff --git a/chapters/4.application-implementation/4.4.problems-faced.tex b/chapters/4.application-implementation/4.4.problems-faced.tex new file mode 100644 index 0000000..84873eb --- /dev/null +++ b/chapters/4.application-implementation/4.4.problems-faced.tex @@ -0,0 +1 @@ +\section{Προβλήματα ανάπτυξης} \label{section:4-5-problems-faced} diff --git a/chapters/4.application-implementation/4.5.implemented-parts.tex b/chapters/4.application-implementation/4.5.implemented-parts.tex new file mode 100644 index 0000000..0e9cfb5 --- /dev/null +++ b/chapters/4.application-implementation/4.5.implemented-parts.tex @@ -0,0 +1,45 @@ +\section{Χαρακτηριστικά που υλοποιήθηκαν} \label{section:4-5-implemented-parts} + +Κατά την υλοποίηση εμφανίστηκαν διάφορα προβλήματα που δεν είχαν προβλεφθεί όπως αναλύθηκε στο προηγούμενο κεφάλαιο και τα οποία προκάλεσαν καθυστερήσεις στην ολοκλήρωση των tasks. Λόγω των καθυστερήσεων αυτών έγιναν διάφορες αναδιαμορφώσεις του προγραμματισμού των Sprint καθώς και διαπραγματεύσεις της σημαντικότητας των χαρακτηριστικών. Από τον επανασχεδιασμό και τις προσαρμογές αυτές προέκυψαν μερικές αλλαγές στο τελικό σετ των χαρακτηριστικών της πλατφόρμας σε σχέση με ό,τι είχε αρχικά προδιαγραφεί. Τα χαρακτηριστικά που υλοποιήθηκαν τελικά είναι: + +\begin{itemize} + \item η εγγραφή χρήστη και η δημιουργία των τοπικών βάσεων του όπως περιγράφεται στις \ref{srs:functional-srs-sign-up} \& \ref{srs:functional-srs-create-user-databases} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-signup} + \item η αυτόματη είσοδος χρήστη όπως περιγράφεται στην \ref{srs:functional-srs-sign-in} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-signin} + \item η δημιουργία θέματος και η δημιουργία ψηφοφοριών όπως περιγράφεται στις \ref{srs:functional-srs-create-topic} \& \ref{srs:functional-srs-create-polls} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-create-topic} + \item η περιήγηση στα υπάρχοντας θέματα όπως περιγράφεται στην \ref{srs:functional-srs-browse-topics} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-fetch-topic} + \item η δημοσίευση μηνύματος όπως περιγράφεται στην \ref{srs:functional-srs-create-post} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-create-post} + \item η επεξεργασία μηνύματος όπως περιγράφεται στην \ref{srs:functional-srs-modify-post} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-modify-post} + \item η ψήφιση σε ψηφοφορία όπως περιγράφεται στην \ref{srs:functional-srs-vote-polls} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-vote-in-poll} + \item η ψήφιση σε μηνύματα όπως περιγράφεται στην \ref{srs:functional-srs-vote-posts} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-vote-post} + \item η διαγραφή των τοπικών δεδομένων όπως περιγράφεται στην \ref{srs:functional-srs-delete-local-data} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-delete-local-data} +\end{itemize} + +Τα παραπάνω αντιστοιχούν σε 11 ολοκληρωμένες από τις 13 προδιαγεγραμμένες ΛΑ ή πλήρωση 84.6\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApps και υπερβάλλων για τα πλαίσια ενός PoC. Στο παράρτημα \ref{screenshots-appendix} παρατίθενται τα στιγμιότυπα οθόνης των υλοποιημένων χαρακτηριστικών. + +Τα χαρακτηριστικά τα οποία παραλήφθηκαν είναι τα παρακάτω: + +\begin{itemize} + \item η δημιουργία κοινοτήτων και ο ορισμός εξωτερικών contracts για τα tokens τους όπως περιγράφεται στις \ref{srs:functional-srs-create-communities} \& \ref{srs:functional-srs-assign-community-contract} και στο σενάριο χρήσης \ref{subsection:3-10-use-case-create-community} +\end{itemize} + +Τέλος, η ΜΛΑ που αφορά την ελαχιστοποίηση των fees (\ref{srs:non-functional-srs-minimize-fees}) ακολουθήθηκε κατά το δυνατόν σε όλη τη διαδικασία σχεδιασμού και υλοποίησης. Η ΜΛΑ σχετικά με την αναβαθμισιμότητα των contracts (\ref{srs:non-functional-srs-upgrade-contracts}) καταστρατηγήθηκε λόγω του χρόνου που θα απαιτούσε μία τέτοια υλοποίηση. + +Η \ref{srs:non-functional-srs-maximum-decentraliztion} απαιτεί την μεγιστοποίηση της αποκέντρωσης της πλατφόρμας. Παρότι υπάρχουν μέρη τα οποία φαινομενικά έχει παραβιαστεί, όπως η διάθεση της εφαρμογής και των contract artifacts μέσω κεντροποιημένων servers καθώς και η ύπαρξη του rendezvous server, στην πραγματικότητα έχει ακολουθηθεί σε ικανοποιητικό βαθμό. Σχετικά με την εφαρμογή και τα contracts, πάρθηκε η απόφαση να διατεθούν μέσω των αντίστοιχων servers επειδή αυτό προσφέρει μεγάλη ευελιξία και ευκολία στην ανάπτυξη. Θα μπορούσαν εύκολα να διατεθούν μέσω αποκεντρωμένων συστημάτων όπως torrents ή το IPFS και αυτό παραμένει ένα ανοιχτό θέμα. Επίσης ανοιχτό θέμα παραμένει η ανάγκη ύπαρξης του rendezvous server. Λόγω της φύσης του πρωτοκόλλου IPFS και της λειτουργίας που επιτελεί ο server αυτός, είναι αδύνατον να παραληφθεί, ωστόσο είναι ανοιχτό ερευνητικό πεδίο η περαιτέρω αποκέντρωση του πρωτοκόλλου. +% https://mnot.github.io/avoiding-internet-centralization/draft-nottingham-avoiding-internet-centralization.html#name-necessary-centralization + +\subsection{Διαφορές σχεδιασμού-υλοποίησης} \label{subsection:4-6-1-design-implementation-differences} + +Σημαντικές διαφορές υπήρξαν επίσης στην διαδικασία υλοποίησης τόσο όσον αφορά τον αριθμό και τις λειτουργίες των διαφορετικών πακέτων λογισμικού όσο και τον χρονοπρογραμματισμό. Προστέθηκαν τρεις νέες υπηρεσίες, η υπηρεσία "Concordia Contracts Provider", ο προσαρμοσμένος IPFS pinner και η ιστοσελίδα "Concordia Guide". + +Η ανάγκη για τα νέα πακέτα λογισμικού προέκυψε κατά την πορεία υλοποίησης της διπλωματικής και προστέθηκαν στον χρονοπρογραμματισμό που είχε γίνει στην αρχή της εργασίας. Στην προσαρμογή αυτή βοήθησαν ιδιαίτερα οι Agile τακτικές που ακολουθήθηκαν και η προσαρμοστικότητα που προσφέρει το Scrum σε μεταβαλλόμενες απαιτήσεις. + +Τέλος, κατά την υλοποίηση έγινε γρήγορα αντιληπτή η αξία που προσφέρουν ένα δοκιμαστικό περιβάλλον (staging environment) σε συνδυασμό με ένα CI/CD σύστημα. Για το λόγο αυτό πάρθηκε η απόφαση να μεταφερθεί το sprint που αφορούσε αυτά πολύ νωρίτερα στην διαδικασία υλοποίησης, ώστε να μεγιστοποιηθεί η χρήση του. + +Εποπτικά, η διαδικασία της υλοποίησης περιγράφεται στο παρακάτω σχήμα (σχήμα \ref{figure:4.6.design-implementation-differences-sprints}). Με σκούρο πράσινο χρώμα εμφανίζονται τα tasks τα οποία υπήρχαν στο χρονοπρογραμματισμό από τη αρχή και υλοποιήθηκαν, με ανοιχτό πράσινο αυτά τα οποία δεν υπήρχαν στον αρχικό προγραμματισμό αλλά υλοποιήθηκαν και με κόκκινο αυτά τα οποία δεν υλοποιήθηκαν. + +\begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png} + \caption{Διαχωρισμός σε sprints} + \label{figure:4.6.design-implementation-differences-sprints} +\end{figure} diff --git a/chapters/5.conclusions-open-areas/5.0.conclusions-open-areas.tex b/chapters/5.conclusions-open-areas/5.0.conclusions-open-areas.tex new file mode 100644 index 0000000..a7bb80f --- /dev/null +++ b/chapters/5.conclusions-open-areas/5.0.conclusions-open-areas.tex @@ -0,0 +1,4 @@ +\chapter[Συμπεράσματα και ανοιχτά θέματα]{Συμπεράσματα \\και ανοιχτά θέματα}\label{chapter:5-conclusions-open-areas} + +\input{chapters/5.conclusions-open-areas/5.1.conclusions} +\input{chapters/5.conclusions-open-areas/5.2.open-areas} \ No newline at end of file diff --git a/chapters/5.conclusions-open-areas/5.1.conclusions.tex b/chapters/5.conclusions-open-areas/5.1.conclusions.tex new file mode 100644 index 0000000..7a6df34 --- /dev/null +++ b/chapters/5.conclusions-open-areas/5.1.conclusions.tex @@ -0,0 +1,20 @@ +\section{Συμπεράσματα}\label{section:5-1-conclusions} + +Συνοψίζοντας, μέσω της ανάπτυξης της πιλοτικής εφαρμογής Concordia γίνεται φανερό ότι είναι εφικτή η υλοποίηση μίας πλήρως αποκεντρωμένης κοινωνικής πλατφόρμας, η οποία να εκπληρώνει τον στόχο που τέθηκε στην \hyperref[section:1-4-thesis-goal]{ενότητα 1.4}, σύμφωνα με τον σχεδιασμό του \hyperref[chapter:3-application-design]{κεφαλαίου 3}. + +Μέσω της αρχιτεκτονικής αποκέντρωσης των τριών επιπέδων της τεχνολογικής στοίβας (βλ. \hyperref[section:3-2-technology-stack]{ενότητα 3.2}), δημιουργείται ένα πολιτικά αποκεντρωμένος ψηφιακός χώρος, ο οποίος κατοχυρώνει την ελευθερία του λόγου των συμμετεχόντων και παρέχει παντοδύναμες αυθεντικές δημοκρατικές διαδικασίες. + +Ωστόσο, θα πρέπει να επισημανθεί ότι η εφαρμογή χαρακτηρίζεται από ορισμένα μειονεκτήματα, τα οποία σχετίζονται, κυρίως, με την πρώιμη κατάσταση ανάπτυξης των επιλεγμένων τεχνολογιών: + +\begin{itemize} + \item Στο Application tier, μέσω της χρήσης του Ethereum, εισάγονται όλα εκείνα τα ζητήματα που συνοδεύουν επί του παρόντος το blockchain και τα smart contracts. Τα βασικότερα από αυτά είναι τα τέλη των συναλλαγών, η ανάγκη χρήσης επιπρόσθετων λογισμικών (π.χ. MetaMask) και η κλιμακοθετησιμότητά (scalability) των DApp. Σε γενικές γραμμές, το κλίμα στην παγκόσμια προγραμματιστική κοινότητα παραμένει αρκέτα πολωμένο ως προς το αν τελικά πλατφόρμες όπως το Ethereum θα μπορέσουν να ξεπεράσουν τα διάφορα προβλήματα και να ανταπεξέλθουν στις προσδοκίες. + + \begin{enumitemcenteredfigure} + \includegraphics[width=.50\textwidth]{assets/figures/chapter-5/5.1.xkcd_2030_voting_software} + \caption{\url{https://xkcd.com/2030/}} + \end{enumitemcenteredfigure} + + \item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, τα οποία σχετίζονται κυρίως με την εύρεση των peers (το οποίο βασίζεται προσωρινά σε signalling servers\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}) και το replication των δεδομένων. +\end{itemize} + +Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση. diff --git a/chapters/5.conclusions-open-areas/5.2.open-areas.tex b/chapters/5.conclusions-open-areas/5.2.open-areas.tex new file mode 100644 index 0000000..09274ad --- /dev/null +++ b/chapters/5.conclusions-open-areas/5.2.open-areas.tex @@ -0,0 +1,48 @@ +\section{Ανοιχτά θέματα}\label{section:5-2-open-areas} + +\subsection{Διαχείριση των τελών του Ethereum}\label{subsection:5-2-1-ethereum-fees-management} + +Οι ανάγκες κάθε υπολογιστικού συστήματος σε πόρους που σχετίζονται με τις διάφορες λειτουργίες του (π.χ. επεξεργασία, αποθήκευση δεδομένων, δίκτυα) μεταφράζονται σε κάποιο οικονομικό κόστος. Στην περίπτωση της παρούσας εφαρμογής, ενώ η αποθήκευση των δεδομένων διαμοιράζεται αυτοβούλως ανάμεσα στους συμμετέχοντες κόμβους, η χρήση του Ethereum απαιτεί από τα μέλη την καταβολή τελών για τη δημιουργία συναλλαγών. Αν και αυτά τα τέλη είναι απαραίτητα για τη λειτουργία του blockchain και την προάσπισή του από επιθέσεις, αποτελούν ισχυρό εμπόδιο για την ένταξη των τελικών χρηστών στο οικοσύστημα των αποκεντρωμένων εφαρμογών του Ethereum. + +Στα πλαίσια της εφαρμογής Concordia, η λήψη μέτρων για τη διαχείριση των τελών θεωρείται υψίστης σημασίας. Ωστόσο, η συμπερίληψη ενός τέτοιου μηχανισμού θα περιέπλεκε εξαιρετικά τον σχεδιασμό της και, ως εκ τούτου, λήφθηκε η απόφαση να συμπεριληφθεί ως πρόταση για μελλοντική της επέκταση. Ένας τέτοιος μηχανισμός θα παρείχε τη δυνατότητα στα μέλη της πλατφόρμας να τη χρησιμοποιούν χωρίς να κατέχουν ή να δαπανούν ETH. Αυτό θα ήταν εφικτό μέσω της χρήσης "μετασυναλλαγών"\footnote{Μετασυναλλαγή (meta-transaction) θεωρείται μία συναλλαγή που υπογράφεται από τον Ethereum λογαριασμό του χρήστη και προωθείται σε κάποιον τρίτο για να την εκτελέσει επί του blockchain.}, οι οποίες θα μεταβίβαζαν την αποπληρωμή των τελών στις κοινότητες που ανήκουν οι χρήστες. + +Αυτή τη στιγμή υπάρχουν ήδη προσεγγίσεις υλοποιήσεων τέτοιου είδους μηχανισμών, όπως το Gas Station Network\footnote{\url{https://opengsn.org/}}, ενώ η προγραμματιστική ομάδα του Ethereum εργάζεται ενεργά για την εγγενή υποστήριξη αυτής της δυνατότητας από την ίδια την πλατφόρμα. + +\subsection{Διανομή των Ethereum token}\label{subsection:5-2-2-token-distribution} + +Στον φυσικό κόσμο, η έγκυρη και ανώνυμη διανομή ενός συνόλου μοναδικών πιστοποιητικών αυθεντικοποίησης στα μέλη μίας κοινότητας θα μπορούσε να ήταν μία διαδικασία, η οποία να απαιτούσε την φυσική παρουσία των χρηστών και την επιλογή ενός λαχνού-πιστοποιητικού από μία κληρωτίδα. Σε αυτήν την περίπτωση θα έπρεπε είτε να υπήρχε ολομέλεια και, έτσι, διαμοιρασμός της εμπιστοσύνης σε όλα τα μέλη, είτε να υπήρχε μεταβίβαση της εμπιστοσύνης σε μία επιτροπή. + +Στον ψηφιακό κόσμο, το παραπάνω ζήτημα αποτελεί μία ιδιαίτερη πρόκληση με ποικίλες προσεγγίσεις σχετικά με την επιλογή των συστημάτων που θα χρησιμοποιηθούν, καθώς και των οντοτήτων στις οποίες θα εκχωρηθεί εμπιστοσύνη. + +Στην παρούσα εφαρμογή, η υλοποίηση μηχανισμών για την ανώνυμη διανομή των Ethereum token των κοινοτήτων με τρόπο που να μην απαιτείται η εκχώρηση εμπιστοσύνης σε τρίτους, τέθηκε εκτός του πλαισίου της εργασίας, εξαιτίας της παρέκκλισης από το κεντρικό θέμα και της πολυπλοκότητας της. Όπως είναι σχεδιασμένη αυτήν τη στιγμή, η Concordia δύναται να υποστηρίξει ποικίλες αφηρημένες διαδικασίες οι οποίες να κατοχυρώνουν την εγκυρότητα των εκάστοτε μελών, αλλά όχι την ανωνυμία τους. Εκείνη, όσο η διαδικασία βασίζεται σε κάποια κεντρική οντότητα αυθεντικοποίησης, δε μπορεί να διασφαλιστεί, καθώς θα απαιτεί πάντα την εκχώρηση εμπιστοσύνης από τον τελικό χρήστη στα υπολογιστικά συστήματα της πρώτης. Η εμφάνιση του προβλήματος οφείλεται στο γεγονός ότι η ανωνυμοποίηση των πιστοποιητικών θα πρέπει να λάβει χώρα εντός των των προαναφερθέντων συστημάτων, τα οποία, ως επί το πλείστον, θα είναι συγκεντρωτικής λογικής. + +Για παράδειγμα, έστω ότι μία κεντρική αρχή με δικό της σύστημα αυθεντικοποίησης αρχιτεκτονικής πελάτη-εξυπηρετητή αποφασίζει να συμμετάσχει στην πλατφόρμα της Concordia, δημιουργώντας μία κοινότητα και ορίζοντας ένα εξωτερικό smart contract για τα token των μελών της. Ο μηχανισμός διανομής των token θα μπορούσε να ήταν η εγγραφή του χρήστη στο κεντρικό σύστημα της αρχής, η δήλωση μίας Ethereum διεύθυνσής του και η αποστολή ενός token αυθεντικοποίησης σε αυτήν. Κάτι τέτοιο θα έδινε τη δυνατότητα στους διαχειριστές του συστήματος να εντοπίζουν με ευκολία τις πραγματικές ταυτότητες των μελών της κοινότητας πίσω από κάθε token της, αίροντας, έτσι, την ανωνυμία των τελευταίων. + +Λύση στο παραπάνω πρόβλημα μπορεί να επέλθει μόνο με την υλοποίηση μίας διαδικασίας ανωνυμοποίησης των token επί του blockchain. Αυτό απαιτεί την ύπαρξη ενός μηχανισμού στο οικοσύστημα του Ethereum, ο οποίος να παρέχει τη δυνατότητα μεταφοράς των token αποκρύπτοντας τις διευθύνσεις προέλευσης και προορισμού τους. Έτσι, οι χρήστες απλώς θα μετακινούσαν τα token που αρχικά παρέλαβαν σε μία διεύθυνση μη προσδιορίσιμη από τρίτους. + +Στο ευρύτερο οικοσύστημα των blockchain υπάρχουν ήδη υλοποιήσεις που προσφέρουν αυτήν την δυνατότητα επί του εγγενούς τους νομίσματος (π.χ. Monero, Zcash), ενώ διάφορες ομάδες εργάζονται ενεργά για την ανάπτυξη τέτοιων μηχανισμών και στο Ethereum. Αν και υπάρχουν διαφοροποιήσεις στις προσεγγίσεις τους, η κύρια τεχνολογία στην οποία βασίζονται είναι αυτή των λεγόμενων "zero knowledge proof", με επικρατέστερα πρωτόκολλα τα zk-SNARK και zk-STARK. Ως μία ήδη λειτουργική λύση τύπου μίκτη συναλλαγών θα μπορούσε να θεωρηθεί ο Tornado\footnote{\url{https://tornado.cash/}}, ο οποίος παρέχει τη δυνατότητα ανώνυμης μεταφοράς ETH ή ERC20 token αξιοποιώντας τα zk-SNARK.\cite{5.2-privacy-on-ethereum} + +\subsection{Εναλλακτικά συστήματα ψηφοφορίας}\label{subsection:5-2-3-alternative-voting-systems} + +Επί του παρόντος, η εφαρμογή λειτουργεί αποκλειστικά αμεσοδημοκρατικά, με καθολικές ψηφοφορίες και ισάξιες ψήφους, όπως ορίζεται από το έξυπνο συμβόλαιο \texttt{Voting.sol}. + +Τροποποιώντας την τρέχουσα υλοποίηση, η πλατφόρμα μπορεί να υποστηρίξει εναλλακτικά συστήματα ψηφοφορίας, μέσω της ανάπτυξης προσαρμοσμένων έξυπνων συμβολαίων. Αυτό θα έχει ως αποτέλεσμα να παρέχεται στην κάθε κοινότητα η δυνατότητα να ορίσει το voting smart contract που επιθυμεί, ανάλογα με τις ανάγκες και τις επιδιώξεις της. + +Μερικά συστήματα ψηφοφοριών που μπορούν να ενσωματωθούν (και ακόμα και να συνδυαστούν) στην πλατφόρμα είναι τα παρακάτω: + +\begin{itemize} + \item Ψήφοφορία με σειρά προτίμησης (ranked voting): το εκλογικό σώμα θα έχει τη δυνατότητα να ψηφίζει με σειρά προτίμησης μεταξύ των διαθέσιμων επιλογών των ψηφοφοριών. + \item Πολλαπλή ψήφος: ορισμένοι ψηφοφόροι θα έχουν ισχυρότερη ψήφο βάσει κάποιου κριτηρίου (π.χ. βάσει του reputation τους). + \item Έμμεση ψηφοφορία: κάθε μέλος θα ορίζει αντιπρόσωπο για μία ή περισσότερες ψηφοφορίες, για ορισμένο ή αόριστο χρονικό διάστημα. + \item Μερική ψηφοφορία: επιβολή περιρισμών στο δικαίωμα ψήφου, βάσει κάποιου κριτηρίου (π.χ. ημερομηνία εγγραφής χρήστη). +\end{itemize} + +Φυσικά τα παραπάνω είναι καθαρά ενδεικτικά, πράγμα που σημαίνει ότι θα είναι εφικτό να μπορούν να δημιουργούνται εντελώς διαφορετικά συμβόλαια συστημάτων ψηφοφορίας, ανά πάσα στιγμή και από τον οποιονδήποτε. Η δε σύνδεσή τους με την εφαρμογή θα είναι όμοια με τα ήδη υλοποιημένα, αφού η μοναδική απαιτούμενη ενέργεια θα είναι η αποθήκευση ενός pointer προς το voting contract της εκάστοτε κοινότητας. + +\subsection{Συστήματα απόδοσης εμπιστοσύνης}\label{subsection:5-2-4-reputation-systems} + +Μία επιπλέον προσθήκη στην εφαρμογή μπορεί είναι ένα σύστημα απόδοσης εμπιστοσύνης (reputation system). Μέσω ενός reputation system, οι χρήστες μπορούν να κερδίζουν ή να χάνουν βαθμούς εμπιστοσύνης, με τον τρόπο που ορίζεται από το εκάστοτε smart contract. + +Ορισμένες ενδεικτικές χρήσεις του είναι η συνεργασία του με τους μηχανισμούς που περιγράφονται στις υποενότητες \ref{subsection:5-2-1-ethereum-fees-management} και \ref{subsection:5-2-3-alternative-voting-systems}. Για παράδειγμα, η ισχύς της ψήφου ενός μέλους μίας κοινότητας ή το ποσό των τελών που καλείται να καταβάλλει στο Ethereum θα μπορούσαν να υπολογίζονται αναλογα με τον βαθμό εμπιστοσύνης που έχει αποκτήσει. + +Υιοθετώντας την αφηρημένη λογική που περιγράφηκε στα συστήματα ψηφοφορίας της προηγούμενης παραγράφου, είναι εφικτό να παρέχεται η δυνατότητα σε κάθε κοινότητα να επιλέγει μεταξύ ενός συνόλου διαφορετικών συστημάτων απόδοσης εμπιστοσύνης για τα μέλη της, μέσω εναλλακτικών reputation smart contract. Ήδη υπάρχει μία πλούσια γκάμα τέτοιων συστημάτων που μπορούν να υλοποιηθούν επί του Ethereum, με την ταξινομία τους να ορίζεται επί μίας πληθώρας ανεξάρτητων διαστάσεων.\cite{5.2-taxonomy-of-reputation-systems} Ωστόσο, η περαιτέρω ανάλυση τους, είναι θέμα που εκτείνεται πέρα από τα πλαίσια της παρούσας διπλωματικής εργασίας. diff --git a/chapters/5.conclusions/5.0.conclusions.tex b/chapters/5.conclusions/5.0.conclusions.tex deleted file mode 100644 index 37ef4bb..0000000 --- a/chapters/5.conclusions/5.0.conclusions.tex +++ /dev/null @@ -1,6 +0,0 @@ -\chapter{Συμπεράσματα}\label{chapter:5-conclusions} - -\input{chapters/5.conclusions/5.1.problems-faced} -\input{chapters/5.conclusions/5.2.design-implementation-differences} -\input{chapters/5.conclusions/5.3.open-areas} -\input{chapters/5.conclusions/5.4.conclusion} diff --git a/chapters/5.conclusions/5.1.problems-faced.tex b/chapters/5.conclusions/5.1.problems-faced.tex deleted file mode 100644 index e0bc091..0000000 --- a/chapters/5.conclusions/5.1.problems-faced.tex +++ /dev/null @@ -1 +0,0 @@ -\section{Προβλήματα ανάπτυξης} diff --git a/chapters/5.conclusions/5.2.design-implementation-differences.tex b/chapters/5.conclusions/5.2.design-implementation-differences.tex deleted file mode 100644 index 3f750cc..0000000 --- a/chapters/5.conclusions/5.2.design-implementation-differences.tex +++ /dev/null @@ -1 +0,0 @@ -\section{Διαφορές σχεδιασμού-υλοποίησης} diff --git a/chapters/5.conclusions/5.3.open-areas.tex b/chapters/5.conclusions/5.3.open-areas.tex deleted file mode 100644 index c9a1868..0000000 --- a/chapters/5.conclusions/5.3.open-areas.tex +++ /dev/null @@ -1,8 +0,0 @@ -\section{Ανοιχτά θέματα} - -TODO: add -1. feeless -2. reputation system -3. voting types -4. token distribution -5. ethereum, ipfs, move to proof of stake, remove of rendezvous server diff --git a/chapters/5.conclusions/5.4.conclusion.tex b/chapters/5.conclusions/5.4.conclusion.tex deleted file mode 100644 index 779150e..0000000 --- a/chapters/5.conclusions/5.4.conclusion.tex +++ /dev/null @@ -1 +0,0 @@ -\section{Επίλογος} diff --git a/chapters/appendix/appendix.tex b/chapters/appendix/appendix.tex new file mode 100644 index 0000000..ab50121 --- /dev/null +++ b/chapters/appendix/appendix.tex @@ -0,0 +1 @@ +\input{chapters/appendix/screenshots-appendix} diff --git a/chapters/appendix/screenshots-appendix.tex b/chapters/appendix/screenshots-appendix.tex new file mode 100644 index 0000000..3cca814 --- /dev/null +++ b/chapters/appendix/screenshots-appendix.tex @@ -0,0 +1,4 @@ +\chapter*{Παράρτημα Αʹ\\[20pt]Στιγμιότυπα οθόνης πλατφόρμας}\label{screenshots-appendix} +\addcontentsline{toc}{section}{Αʹ Στιγμιότυπα οθόνης πλατφόρμας} + +% TODO: add screenshots of application \ No newline at end of file diff --git a/custom-commands/appendix-overrides.tex b/custom-commands/appendix-overrides.tex new file mode 100644 index 0000000..1076d8b --- /dev/null +++ b/custom-commands/appendix-overrides.tex @@ -0,0 +1,2 @@ +\renewcommand{\appendixtocname}{Παραρτήματα} +\renewcommand{\appendixpagename}{Παραρτήματα} diff --git a/custom-commands/custom-logos.tex b/custom-commands/custom-logos.tex new file mode 100644 index 0000000..23606a3 --- /dev/null +++ b/custom-commands/custom-logos.tex @@ -0,0 +1,7 @@ +\newcommand{\logo}[2]{ + \begin{figure}[H] + \centering + \includegraphics[width=.12\textwidth]{assets/figures/#1} + \caption{#2} + \end{figure} +} \ No newline at end of file diff --git a/misc/packages.tex b/misc/packages.tex index a53facc..3ebd3a2 100644 --- a/misc/packages.tex +++ b/misc/packages.tex @@ -15,7 +15,7 @@ \usepackage{fontawesome5} % --- Styling --- -\usepackage{hyperref} % Extensive support for hypertext +\usepackage[bookmarksnumbered]{hyperref} % Extensive support for hypertext \usepackage{authblk} % Support for footnote style author/affiliation \usepackage{enumitem} % For item lists \usepackage{custom-packages/greek-enumerate} % Greek enumeration for ordered item lists @@ -30,6 +30,7 @@ \usepackage{tcolorbox} % Colored boxes \tcbuselibrary{minted} % Make tcolorbox work with minted \usepackage{graphicx} +\usepackage{appendix} % Appendix helpers % --- TikZ and UML diagrams \usepackage{pgf-umlsd} @@ -41,14 +42,16 @@ \input{custom-commands/custom-title-page} \input{custom-commands/custom-lists} \input{custom-commands/custom-listings} +\input{custom-commands/custom-logos} \input{custom-commands/custom-enumitem} \input{custom-commands/srs-commands} \input{custom-commands/use-case-commands} \input{custom-commands/custom-spheading} +\input{custom-commands/appendix-overrides} % --- Custom styles --- \renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines \MakeOuterQuote{"} % For csquotes package % Hyphenations -\input{misc/hyphenations} +\input{misc/hyphenations} %TODO: needed? diff --git a/thesis.pdf b/thesis.pdf index 8ca0bcb..dfcba6b 100644 Binary files a/thesis.pdf and b/thesis.pdf differ diff --git a/thesis.tex b/thesis.tex index 67707da..082368e 100644 --- a/thesis.tex +++ b/thesis.tex @@ -29,12 +29,17 @@ \input{chapters/2.theoretical-background/2.0.theoretical-background} \input{chapters/3.application-design/3.0.application-design} \input{chapters/4.application-implementation/4.0.application-implementation} -\input{chapters/5.conclusions/5.0.conclusions} +\input{chapters/5.conclusions-open-areas/5.0.conclusions-open-areas} + +\appendix +\appendixpage +\addappheadtotoc +\input{chapters/appendix/appendix} % end of thesis body % -------------------------- % Prints out the references -\printbibliography +\printbibliography[heading=bibintoc] \end{document} diff --git a/tikz/chapter-3/3-6-use-case-create-community-alternate-flow-1-sequence-diagram.tex b/tikz/chapter-3/3-6-use-case-create-community-alternate-flow-1-sequence-diagram.tex new file mode 100644 index 0000000..2f04687 --- /dev/null +++ b/tikz/chapter-3/3-6-use-case-create-community-alternate-flow-1-sequence-diagram.tex @@ -0,0 +1,21 @@ +\begin{sequencediagram} + \newthread{actor}{Actor}{} + \newinst[4]{concordia}{:Concordia}{} + \newinst[4]{eth}{:Ethereum}{} + \newinst{orbit}{:OrbitDb}{} + + \begin{call}{actor}{Create community}{concordia}{Community creation form} + \end{call} + + \begin{call}{actor}{Add external contract}{concordia}{External contract form} + \end{call} + + \begin{call}{actor}{Submit}{concordia}{Created community page} + + \begin{call}{concordia}{Create community}{eth}{New community ID} + \end{call} + + \begin{call}{concordia}{Connect external contract}{eth}{} + \end{call} + \end{call} +\end{sequencediagram} diff --git a/tikz/chapter-3/3-6-use-case-create-community-sequence-diagram.tex b/tikz/chapter-3/3-6-use-case-create-community-sequence-diagram.tex new file mode 100644 index 0000000..144033b --- /dev/null +++ b/tikz/chapter-3/3-6-use-case-create-community-sequence-diagram.tex @@ -0,0 +1,16 @@ +\begin{sequencediagram} + \newthread{actor}{Actor}{} + \newinst[3]{concordia}{:Concordia}{} + \newinst[2]{eth}{:Ethereum}{} + \newinst[1]{orbit}{:OrbitDb}{} + + \begin{call}{actor}{Create community}{concordia}{Community creation form} + \end{call} + + \begin{call}{actor}{Submit}{concordia}{Created community page} + + \begin{call}{concordia}{Create community}{eth}{New community ID} + \end{call} + + \end{call} +\end{sequencediagram}