diff --git a/chapters/2.theoretical-background/2.6.ethereum.tex b/chapters/2.theoretical-background/2.6.ethereum.tex index b430602..0c29e95 100644 --- a/chapters/2.theoretical-background/2.6.ethereum.tex +++ b/chapters/2.theoretical-background/2.6.ethereum.tex @@ -90,7 +90,7 @@ ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι Τέλος, τα token συχνά ακολουθούν κάποια καθορισμένα standards στην υλοποίησή τους. Τα δημοφιλέστερα από αυτά είναι τα ERC-20 και ERC-777 (για fungible token), το ERC-721 (για NFTs) και το ERC-1155 (για semi-fungible token ή SFTs). \subsection{EVM} \label{subsection:2-6-5-evm} -Τα smart contracts (και, κατ' επέκταση, οι DApps) εκτελούνται από την εικονική μηχανή του Ethereum (Ethereum Virtual Machine ή EVM). Η EVM αποτελεί μία quasi\footnote{"Quasi" ("σχεδόν") επειδή όλες οι διαδικασίες εκτέλεσης περιορίζονται σε έναν πεπερασμένο αριθμό υπολογιστικών βημάτων από την ποσότητα gas που είναι διαθέσιμη για οποιαδήποτε εκτέλεση ενός smart contract.}–Turing-complete μηχανή καταστάσεων αρχιτεκτονικής βασισμένης σε στοίβα (stack-based architecture). Σε υψηλό επίπεδο, η EVM μπορεί να θεωρηθεί ως ένας παγκόσμιος αποκεντρωμένος υπολογιστής που περιέχει εκατομμύρια εκτελέσιμα αντικείμενα, το καθένα με τη δική του μόνιμη αποθήκη δεδομένων. +Τα smart contract (και, κατ' επέκταση, οι DApp) εκτελούνται από την εικονική μηχανή του Ethereum (Ethereum Virtual Machine ή EVM). Η EVM αποτελεί μία quasi\footnote{"Quasi" ("σχεδόν") επειδή όλες οι διαδικασίες εκτέλεσης περιορίζονται σε έναν πεπερασμένο αριθμό υπολογιστικών βημάτων από την ποσότητα gas που είναι διαθέσιμη για οποιαδήποτε εκτέλεση ενός smart contract.}–Turing-complete μηχανή καταστάσεων αρχιτεκτονικής βασισμένης σε στοίβα (stack-based architecture). Σε υψηλό επίπεδο, η EVM μπορεί να θεωρηθεί ως ένας παγκόσμιος αποκεντρωμένος υπολογιστής που περιέχει εκατομμύρια εκτελέσιμα αντικείμενα, το καθένα με τη δική του μόνιμη αποθήκη δεδομένων. Η EVM αποθηκεύει όλες τις τιμές της μνήμης σε μια στοίβα και λειτουργεί με μέγεθος λέξης 256 bit, κυρίως για τη διευκόλυνση των εγγενών λειτουργιών κατακερματισμού και ελλειπτικής καμπύλης. Διαθέτει ένα σύνολο διευθυνσιοδοτήσιμων στοιχείων δεδομένων: diff --git a/chapters/3.application-design/3.2.technology-stack.tex b/chapters/3.application-design/3.2.technology-stack.tex index ca572fe..7738018 100644 --- a/chapters/3.application-design/3.2.technology-stack.tex +++ b/chapters/3.application-design/3.2.technology-stack.tex @@ -5,7 +5,7 @@ \begin{enumerate} \item \textbf{Presentation tier}: Αποτελεί τη διεπαφή του χρήστη (user interface ή UI), μέσω της οποίας ο τελευταίος αλληλεπιδρά με την εφαρμογή. Για την εκπλήρωση των προδιαγραφών, το μοναδικό απαραίτητο χαρακτηριστικό αυτού του τμήματος είναι να μπορεί να εκτελείται αυτούσιο από τη συσκευή του τελικού χρήστη, δηλαδή να μην απαιτείται η ύπαρξη κάποιου εξυπηρετητή για τη λειτουργία του. Λαμβάνοντας, επιπροσθέτως, υπόψιν τις ανάγκες και τους περιορισμούς των λογισμικών των άλλων δύο επιπέδων, το παρόν κομμάτι αποφασίστηκε να σχεδιαστεί ως μία client-side web application σε HTML, CSS και JavaScript. - \item \textbf{Application tier}: Πρόκειται για το επίπεδο που πραγματοποιεί την επεξεργασία (\textenglish{processing}) της εφαρμογής. Εδώ επιλέχθηκαν το blockchain και τα smart contracts, καθώς τα πλεονεκτήματά τους, όπως αυτά περιγράφηκαν στο κεφάλαιο \ref{chapter:2-theoretical-background}, αρμόζουν απόλυτα με τις ιδιαίτερες απαιτήσεις της εφαρμογής. Συγκεκριμένα, επιλέχθηκε η πλατφόρμα του Ethereum, καθώς αποτελεί τον πρωτοπόρο στο χώρο, διαθέτοντας την ισχυρότερη κοινότητα και τη δυνατότητα δημιουργίας πλήρως λειτουργικών αποκεντρωμένων εφαρμογών. + \item \textbf{Application tier}: Πρόκειται για το επίπεδο που πραγματοποιεί την επεξεργασία (\textenglish{processing}) της εφαρμογής. Εδώ επιλέχθηκαν το blockchain και τα smart contract, καθώς τα πλεονεκτήματά τους, όπως αυτά περιγράφηκαν στο κεφάλαιο \ref{chapter:2-theoretical-background}, αρμόζουν απόλυτα με τις ιδιαίτερες απαιτήσεις της εφαρμογής. Συγκεκριμένα, επιλέχθηκε η πλατφόρμα του Ethereum, καθώς αποτελεί τον πρωτοπόρο στο χώρο, διαθέτοντας την ισχυρότερη κοινότητα και τη δυνατότητα δημιουργίας πλήρως λειτουργικών αποκεντρωμένων εφαρμογών. \item \textbf{Data tier}: Το τμήμα αυτό είναι υπεύθυνο για την αποθήκευση του κύριου όγκου των δεδομένων (storage). Για την επίτευξη πλήρους αρχιτεκτονικής αποκέντρωσης των δεδομένων επιλέχθηκε το IPFS (βλ. ενότητα \ref{section:2-7-ipfs}), το οποίο διανέμει το περιεχόμενο της εφαρμογής στους peers που συμμετέχουν σε αυτήν, χωρίς να απαιτεί κάποιο κεντρικό σημείο. Έτσι, κάθε χρήστης θα έχει πλήρη κυριότητα επί των δεδομένων του, ενώ, επιπλέον, θα συμμετέχει στην πλατφόρμα διαμοιράζοντας τα δεδομένα άλλων χρηστών. \end{enumerate} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex b/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex index 2b33df7..0233e9d 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex @@ -12,7 +12,7 @@ {\ref{srs:non-functional-srs-minimize-fees}} {Ο επισκέπτης πατάει το κουμπί "Sign Up".} {Ο επισκέπτης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.} -{Σενάριο χρήσης 1, εγγραφή χρήστη στο σύστημα.} +{Σενάριο χρήσης 1, εγγραφή χρήστη στο σύστημα} {\label{table:3-6-use-case-sign-up}} % ===== Base flow ===== 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 index 6ee522c..443e868 100644 --- 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 @@ -12,7 +12,7 @@ {\ref{srs:non-functional-srs-minimize-fees}} {Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην αρχική σελίδα.} -{Σενάριο χρήσης 10, δημιουργία νέας κοινότητας.} +{Σενάριο χρήσης 10, δημιουργία νέας κοινότητας} {\label{table:3-6-use-case-create-community}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in.tex b/chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in.tex index d0d1347..51e2b3b 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.2.use-case-sign-in.tex @@ -12,7 +12,7 @@ {-} {-} {Ο χρήστης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.} -{Σενάριο χρήσης 2, σύνδεση χρήστη στο σύστημα.} +{Σενάριο χρήσης 2, σύνδεση χρήστη στο σύστημα} {\label{table:3-6-use-case-sign-in}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex b/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex index 5e97c4f..5183eec 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex @@ -13,7 +13,7 @@ {\ref{srs:non-functional-srs-minimize-fees}} {Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην αρχική σελίδα.} -{Σενάριο χρήσης 3, δημιουργία νέου θέματος.} +{Σενάριο χρήσης 3, δημιουργία νέου θέματος} {\label{table:3-6-use-case-create-topic}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.4.use-case-fetch-topic.tex b/chapters/3.application-design/3.6.use-cases/3.6.4.use-case-fetch-topic.tex index 46fc9da..8a4d693 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.4.use-case-fetch-topic.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.4.use-case-fetch-topic.tex @@ -13,7 +13,7 @@ {-} {Ο επισκέπτης ή χρήστης πατάει σε ένα από τα θέματα.} {Ο επισκέπτης ή χρήστης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.} -{Σενάριο χρήσης 4, ανάκτηση θέματος.} +{Σενάριο χρήσης 4, ανάκτηση θέματος} {\label{table:3-6-use-case-fetch-topic}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex b/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex index bae682c..e70bc0a 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex @@ -13,7 +13,7 @@ {\ref{srs:non-functional-srs-minimize-fees}} {Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα ενός θέματος.} -{Σενάριο χρήσης 5, δημιουργία νέου μηνύματος.} +{Σενάριο χρήσης 5, δημιουργία νέου μηνύματος} {\label{table:3-6-use-case-create-post}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex b/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex index 843994b..902d4ef 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex @@ -12,7 +12,7 @@ {-} {Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα του θέματος που περιέχει το μήνυμά του.} -{Σενάριο χρήσης 6, τροποποίηση μηνύματος.} +{Σενάριο χρήσης 6, τροποποίηση μηνύματος} {\label{table:3-6-use-case-modify-post}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex b/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex index 06b0ef4..10ad8b0 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex @@ -12,7 +12,7 @@ {\ref{srs:non-functional-srs-minimize-fees}} {Ο χρήστης πατάει το κουμπί ψηφοφορίας.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα ενός θέματος το οποίο περιλαμβάνει ψηφοφορία.} -{Σενάριο χρήσης 7, ψήφιση σε ψηφοφορία.} +{Σενάριο χρήσης 7, ψήφιση σε ψηφοφορία} {\label{table:3-6-use-case-vote-in-poll}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.8.use-case-vote-post.tex b/chapters/3.application-design/3.6.use-cases/3.6.8.use-case-vote-post.tex index 9fec275..548be21 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.8.use-case-vote-post.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.8.use-case-vote-post.tex @@ -12,7 +12,7 @@ {\ref{srs:non-functional-srs-minimize-fees}} {Ο επισκέπτης πατάει το κουμπί υπερψήφισης ή καταψήφισης.} {Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στη σελίδα ενός θέματος το οποίο περιλαμβάνει τουλάχιστον ένα μήνυμα το οποίο δεν έχει δημιουργήσει ο ίδιος.} -{Σενάριο χρήσης 8, ψήφιση μηνύματος.} +{Σενάριο χρήσης 8, ψήφιση μηνύματος} {\label{table:3-6-use-case-vote-post}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex b/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex index 863dc61..01bef48 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex @@ -12,7 +12,7 @@ {-} {Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων.} {Ο επισκέπτης πρέπει να έχει ανοίξει τη σελίδα της εφαρμογής.} -{Σενάριο χρήσης 9, διαγραφή τοπικών δεδομένων.} +{Σενάριο χρήσης 9, διαγραφή τοπικών δεδομένων} {\label{table:3-6-use-case-delete-local-data}} % ===== Base flow ===== diff --git a/chapters/3.application-design/3.7.architecture-design.tex b/chapters/3.application-design/3.7.architecture-design.tex index 690f9d5..94eb701 100644 --- a/chapters/3.application-design/3.7.architecture-design.tex +++ b/chapters/3.application-design/3.7.architecture-design.tex @@ -19,5 +19,5 @@ \item Ο κώδικας του frontend εκτελείται αποκλειστικά στο σύστημα του χρήστη, χωρίς να απαιτείται κάποιος εξυπηρετητής. Δηλαδή, ο χρήστης αρκεί απλά να έχει τον κώδικα αποθηκευμένο στον υπολογιστή του. \item Ο χρήστης αλληλεπιδρά άμεσα με το UI και το MetaMask. Το MetaMask αποτελεί browser add-on, το οποίο διαχειρίζεται τα ιδιωτικά κλειδιά Ethereum του χρήστη και πραγματοποιεί τις συναλλαγές του τελευταίου με τα smart contract. Στην προκειμένη περίπτωση, περιέχει τα κλειδιά που σχετίζονται αφενός με τη διεύθυνση με την οποία ο χρήστης εγγράφεται στην πλατφόρμα, αφετέρου με τις διευθύνσεις που περιέχουν τα token των κοινοτήτων στις οποίες ανήκει και έχει δικαιώματα ψήφου. \item Στο frontend εκτελείται στο παρασκήνιο ένας κόμβος για το IPFS. Αυτός συνδέεται με άλλους κατάλληλους κόμβους, διαμοιράζοντας τον κύριο όγκο των δεδομένων της εφαρμογής (π.χ. του περιεχομένου των μηνυμάτων). - \item Τέλος, στο Ethereum blockchain υπάρχουν τόσο τα contract της εφαρμογής, όσο και τα εξωτερικά contracts που παρέχουν τα token των κοινοτήτων. Τα μεν λειτουργούν ως το σημείο αναφοράς της εφαρμογής, επί του οποίου εκτελούνται οι ενέργειες και αποθηκεύονται οι μεταβλητές που είναι απολύτως απαραίτητες για τη λειτουργία της πλατφόρμας (π.χ. εγγεγραμμένοι χρήστες, δημιουργημένες κοινότητες). Τα δε δημιουργούνται από εξωτερικές οντότητες, οι οποίες ορίζουν κατά τη βούλησή τους τον ακριβή τρόπο δημιουργίας και διαμοιρασμού των token τους στους χρήστες. + \item Τέλος, στο Ethereum blockchain υπάρχουν τόσο τα contract της εφαρμογής, όσο και τα εξωτερικά contract που παρέχουν τα token των κοινοτήτων. Τα μεν λειτουργούν ως το σημείο αναφοράς της εφαρμογής, επί του οποίου εκτελούνται οι ενέργειες και αποθηκεύονται οι μεταβλητές που είναι απολύτως απαραίτητες για τη λειτουργία της πλατφόρμας (π.χ. εγγεγραμμένοι χρήστες, δημιουργημένες κοινότητες). Τα δε δημιουργούνται από εξωτερικές οντότητες, οι οποίες ορίζουν κατά τη βούλησή τους τον ακριβή τρόπο δημιουργίας και διαμοιρασμού των token τους στους χρήστες. \end{itemize} \ 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 index ef3bced..2355e12 100644 --- 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 @@ -7,7 +7,7 @@ To Ganache παρέχει ισχυρά εργαλεία για την ανάπτυξη έξυπνων συμβολαίων, όπως: \begin{itemize} \item Block explorer, μέσω του οποίου μπορούν να εξεταστούν λεπτομερώς όλα τα blocks και οι συναλλαγές που έλαβαν χώρα. - \item Εξρεύνηση των εσωτερικών των contracts και των πυροδοτημένων event τους. + \item Εξρεύνηση των εσωτερικών των contract και των πυροδοτημένων event τους. \item Ενδελεχές αρχείο καταγραφής της εξόδου του blockchain, το οποίο περιλαμβάνει σημαντικές πληροφορίες για τον εντοπισμό σφαλμάτων. \item Δυνατότητα διαμόρφωσης του χρόνου εξόρυξης των block, έτσι ώστε να αρμόζει με τις εκάστοτε ανάγκες (αυτόματη εξόρυξη ή εξόρυξη σε προσαρμοσμένο χρονικό διάστημα). \end{itemize} diff --git a/chapters/4.application-implementation/4.3.implementation-architecture.tex b/chapters/4.application-implementation/4.3.implementation-architecture.tex index d5d1dc9..05333a5 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture.tex @@ -1,7 +1,7 @@ \section{Αρχιτεκτονική υλοποίησης} \label{section:4-3-implementation-architecture} Το περιβάλλον ανάπτυξης της εφαρμογής υλοποιήθηκε χρησιμοποιώντας το μοντέλο αρχιτεκτονικής των μικροϋπηρεσιών. Το μοντέλο των μικροϋπηρεσιών βασίζεται στην αποδόμηση του συστήματος σε μικρές μονάδες, οι οποίες συνεργάζονται ώστε να προσφέρουν ένα ενιαίο αποτέλεσμα. Η προσέγγιση αυτή έχει πολλά πλεονεκτήματα σε σύγκριση με την ανάπτυξη μονολιθικών εφαρμογών. % todo: add reference -Ο βασικός λόγος για τον οποίο επιλέχθηκε η αρχιτεκτονική μικροϋπηρεσιών είναι η ευκολία που προσφέρει στη γρήγορη ανάπτυξη καινούριων χαρακτηριστικών, ταυτόχρονα από διαφορετικά μέλη μίας ομάδας, ασύγχρονα και χωρίς την ανάγκη συνεχούς επικοινωνίας και συνεννόησης μεταξύ τους. Αυτό συμβαίνει επειδή κάθε μέρος του συστήματος (υπηρεσία) είναι αυτόνομο και η ανάπτυξή του είναι διαχωρισμένη από το υπόλοιπο σύστημα με το οποίο είναι αδύναμα συνδεδεμένο (loosely coupled). +Ο βασικός λόγος για τον οποίο επιλέχθηκε η αρχιτεκτονική μικροϋπηρεσιών είναι η ευκολία που προσφέρει στη γρήγορη ανάπτυξη καινούργιων χαρακτηριστικών, ταυτόχρονα από διαφορετικά μέλη μίας ομάδας, ασύγχρονα και χωρίς την ανάγκη συνεχούς επικοινωνίας και συνεννόησης μεταξύ τους. Αυτό συμβαίνει επειδή κάθε μέρος του συστήματος (υπηρεσία) είναι αυτόνομο και η ανάπτυξή του είναι διαχωρισμένη από το υπόλοιπο σύστημα, με το οποίο είναι αδύναμα συνδεδεμένο (loosely coupled). Το σύστημα του περιβάλλοντος ανάπτυξης συντίθεται από διάφορες μικροϋπηρεσίες, κάποιες από τις οποίες αναπτύχθηκαν στα πλαίσια αυτής της εργασίας, ενώ άλλες αποτελούν δωρεάν λογισμικό ανοιχτού κώδικα. Οι μικροϋπηρεσίες αυτές συνοψίζονται στον παρακάτω πίνακα: @@ -13,8 +13,8 @@ \midrule Concordia Application & Υπηρεσία με την οποία αλληλεπιδρούν οι χρήστες \\ [0.5ex] Concordia Contracts Migrator & Υπηρεσία μεταφόρτωσης των συμβολαίων (contracts) στο blockchain \\ [0.5ex] - Concordia Pinner & Υπηρεσία καρφιτσώματος δεδομένων. \\ [0.5ex] - Concordia Contracts Provider & Υπηρεσία διαμοιρασμού των contract artifacts μέσω HTTP \\ [0.5ex] + Concordia Pinner & Υπηρεσία καρφιτσώματος δεδομένων \\ [0.5ex] + Concordia Contracts Provider & Υπηρεσία διαμοιρασμού των contract artifact μέσω HTTP \\ [0.5ex] Ganache & Τοπικό, ιδιωτικό Ethereum blockchain \\ [0.5ex] Rendezvous Server & Υπηρεσία εύρεσης ομότιμων χρηστών \\ [0.5ex] \bottomrule @@ -32,27 +32,31 @@ \toprule \textbf{Άρθρωμα} & \textbf{Σύντομη περιγραφή - Αντικείμενο/Στόχος} \\ \midrule - Άρθρωμα concordia-shared & Χρήσιμα εργαλεία και σταθερές συστήματος. \\ [0.5ex] - Άρθρωμα concordia-contracts & Μεταγλώττιση των contract και διάθεση των artifact. \\ [0.5ex] - Άρθρωμα eth-identity-provider & Δημιουργία μοναδικού αναγνωριστικού χρήστη για τη βάση OrbitDB. \\ [0.5ex] - Άρθρωμα drizzle & Βελτιωμένη προγραμματιστική διεπαφή επικοινωνίας με το blockchain. \\ [0.5ex] - Άρθρωμα breeze & Βελτιωμένη προγραμματιστική διεπαφή χρήσης της βάσης OrbitDB. \\ [0.5ex] + Άρθρωμα concordia-shared & Χρήσιμα εργαλεία και σταθερές συστήματος \\ [0.5ex] + Άρθρωμα concordia-contracts & Μεταγλώττιση των contract και διάθεση των artifact \\ [0.5ex] + Άρθρωμα eth-identity-provider & Δημιουργία μοναδικού αναγνωριστικού χρήστη για τη βάση OrbitDB \\ [0.5ex] + Άρθρωμα drizzle & Βελτιωμένη προγραμματιστική διεπαφή επικοινωνίας με το blockchain \\ [0.5ex] + Άρθρωμα breeze & Βελτιωμένη προγραμματιστική διεπαφή χρήσης της βάσης OrbitDB \\ [0.5ex] \bottomrule \end{tabularx} \end{center} - \caption{Σύντομη περιγραφή αρθρωμάτων συστήματος.} + \caption{Σύντομη περιγραφή των αρθρωμάτων του συστήματος} \label{table:4-3-software-units-summary} \end{table} +\newpage Τα αρθρώματα και οι υπηρεσίες περιγράφονται αναλυτικότερα σε επόμενες υποενότητες. Στο παρακάτω σχήμα φαίνεται η συνολική αρχιτεκτονική του συστήματος: +\vspace{\baselineskip} + \begin{figure}[H] \centering - \includegraphics[width=.95\textwidth]{assets/figures/chapter-4/4.3.architecture-architecture-overview.png} + \includegraphics[width=\textwidth]{assets/figures/chapter-4/4.3.architecture-architecture-overview.png} \caption{Διάγραμμα αρχιτεκτονικής συστήματος} \label{figure:4-3-architecture-overview} \end{figure} +\newpage \input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units} \input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.2.concordia-application-service} \input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.3.concordia-contracts-migrator} diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.drizzle-unit.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.drizzle-unit.tex index 73b0776..6a4decb 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.drizzle-unit.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.drizzle-unit.tex @@ -2,6 +2,6 @@ Το άρθρωμα drizzle που χρησιμοποιείται στην υπηρεσία \hyperref[subsection:4-3-2-concordia-application-service]{Concordia Application} είναι μία τροποποιημένη έκδοση της JavaScript βιβλιοθήκης Drizzle (και συγκεκριμένα του @drizzle/store\footnote{\url{https://github.com/trufflesuite/drizzle/tree/develop/packages/store}}), η οποία προσφέρεται από τη σουίτα εργαλείων Truffle. Η τροποποιημένη βιβλιοθήκη αναπτύχθηκε στα πλαίσια της διπλωματικής με στόχο τη διευκόλυνση της χρήσης του Drizle και την επιδιόρθωση προβληματικών σημείων της πρωτότυπης βιβλιοθήκης. -Το άρθρωμα drizzle υλοποιεί τις προγραμματιστικές διεπαφές μέσω των οποίων πραγματοποιείται η επικοινωνία της εφαρμογής με το blockchain. Για την επίτευξη της επικοινωνίας αυτής, η βιβλιοθήκη χρησιμοποιεί τη συλλογή βιβλιοθηκών web3.js η οποία αποτελεί τον πιο διαδεδομένο τρόπο διεπαφής με το blockchain σε αποκεντρωτικές εφαρμογές. Τελικά, παρέχει ένα \hyperref[subsection:4-2-2-2-redux]{Redux} store, το οποίο συμπεριλαμβάνεται στο κεντρικό store της εφαρμογής. +Το άρθρωμα drizzle υλοποιεί τις προγραμματιστικές διεπαφές μέσω των οποίων πραγματοποιείται η επικοινωνία της εφαρμογής με το blockchain. Για την επίτευξη της επικοινωνίας αυτής, η βιβλιοθήκη χρησιμοποιεί τη συλλογή βιβλιοθηκών web3.js, η οποία αποτελεί τον πιο διαδεδομένο τρόπο διεπαφής με το blockchain σε αποκεντρωτικές εφαρμογές. Τελικά, παρέχει ένα \hyperref[subsection:4-2-2-2-redux]{Redux} store, το οποίο συμπεριλαμβάνεται στο κεντρικό store της εφαρμογής. Το άρθρωμα αυτό γίνεται διαθέσιμο για χρήση με τη μορφή βιβλιοθήκης μέσω του μητρώου λογισμικού npm\footnote{\url{https://www.npmjs.com/package/@ecentrics/drizzle}}, ενώ το αποθετήριό του βρίσκεται στο GitLab\footnote{\url{https://gitlab.com/ecentrics/drizzle}}. \ No newline at end of file diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.eth-identity-provider-unit.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.eth-identity-provider-unit.tex index e471f94..9a74d9f 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.eth-identity-provider-unit.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.eth-identity-provider-unit.tex @@ -1,6 +1,5 @@ \subsubsection{Άρθρωμα eth-identity-provider} \label{subsubsection:4-3-1-eth-identity-provider-unit} -%TODO: Improve this, add https://github.com/orbitdb/orbit-db-identity-provider#adding-a-custom-identity-signer-and-verifier code to 4.2 Η λειτουργία της βάσης OrbitDB επιτρέπει τη χρήση προσαρμοσμένων orbit-db-identity-provider, οι οποίοι θα δημιουργούν και θα επικυρώνουν τα μοναδικά αναγνωριστικά των χρήστών (OrbitDB Identity) βάσει προσαρμοσμένων εξωτερικών αναγνωριστικών (external identifier), όπως παρουσιάζεται στο σχήμα \ref{figure:4-2-4-2-orbit-db-identity}. diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.3.concordia-contracts-migrator.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.3.concordia-contracts-migrator.tex index 061bfc3..c8e255c 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.3.concordia-contracts-migrator.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.3.concordia-contracts-migrator.tex @@ -2,7 +2,7 @@ \subsubsection{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία αυτή αποτελείται από ένα εκτελέσιμο πρόγραμμα γραμμής εντολών βασισμένο στο άρθρωμα concordia-contracts που αναλύθηκε σε προηγούμενη υποενότητα (\ref{subsection:4-3-1-software-units}). Το πρόγραμμα, κατά την εκτέλεσή του, μεταγλωττίζει τα contract και έπειτα τα μεταφορτώνει στο blockchain το οποίο είναι ορισμένο με χρήση μεταβλητών περιβάλλοντος. Τέλος, αν οι κατάλληλες μεταβλητές περιβάλλοντος είναι ορισμένες, το πρόγραμμα μεταφορτώνει τα τελικά artifacts σε αποθετήριο Concordia Contracts Provider. Η αρχιτεκτονική της υπηρεσίας φαίνεται στο σχήμα \ref{figure:4-3-concordia-contracts-migrator-architecture}. +Η υπηρεσία αυτή αποτελείται από ένα εκτελέσιμο πρόγραμμα γραμμής εντολών βασισμένο στο άρθρωμα concordia-contracts, που αναλύθηκε σε προηγούμενη υποενότητα (\ref{subsection:4-3-1-software-units}). Το πρόγραμμα, κατά την εκτέλεσή του, μεταγλωττίζει τα contract και έπειτα τα μεταφορτώνει στο blockchain, το οποίο είναι ορισμένο με χρήση μεταβλητών περιβάλλοντος. Τέλος, αν οι κατάλληλες μεταβλητές περιβάλλοντος είναι ορισμένες, το πρόγραμμα μεταφορτώνει τα τελικά artifact στο αποθετήριο που παρέχει η υπηρεσία Concordia Contracts Provider. Η αρχιτεκτονική της υπηρεσίας Concordia Contracts Migrator φαίνεται στο σχήμα \ref{figure:4-3-concordia-contracts-migrator-architecture}. \vspace{.5\baselineskip} @@ -15,4 +15,4 @@ \subsubsection{Διανομή} -Η υπηρεσία αυτή γίνεται διαθέσιμη για χρήση ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. Οι χρήστες μπορούν χρησιμοποιώντας μεταβλητές περιβάλλοντος να αλλάξουν τη διεύθυνση του blockchain και την τοποθεσία της υπηρεσίας Contracts Provider στην οποία το πρόγραμμα θα μεταφορτώσει τα contract και τα artifact. \ No newline at end of file +Η υπηρεσία αυτή γίνεται διαθέσιμη για χρήση ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. Οι χρήστες μπορούν, χρησιμοποιώντας μεταβλητές περιβάλλοντος, να αλλάξουν τη διεύθυνση του blockchain και την τοποθεσία της υπηρεσίας Contracts Provider, στην οποία το πρόγραμμα θα μεταφορτώσει τα contract και τα artifact. \ No newline at end of file diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.4.concordia-pinner-service.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.4.concordia-pinner-service.tex index f94aa68..57420fb 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.4.concordia-pinner-service.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.4.concordia-pinner-service.tex @@ -2,7 +2,7 @@ \subsubsection{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application) η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη στη γλώσσα προγραμματισμού JavaScript, ενώ η αρχιτεκτονική της φαίνεται στο σχήμα \ref{figure:4-3-concordia-pinner-architecture}. +Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application), η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη σε γλώσσα προγραμματισμού JavaScript, ενώ η αρχιτεκτονική της παρουσιάζεται στο σχήμα \ref{figure:4-3-concordia-pinner-architecture}. \vspace{.5\baselineskip} @@ -13,10 +13,10 @@ \label{figure:4-3-concordia-pinner-architecture} \end{figure} -Η υπηρεσία αυτή υλοποιήθηκε για να εγγυηθεί η διαθεσιμότητα του περιεχομένου του συστήματος που αποθηκεύεται στο IPFS (τίτλοι θεμάτων, περιεχόμενο μηνυμάτων και άλλα). Λόγω του τρόπου λειτουργίας του IPFS, το περιεχόμενο που αναρτούν οι χρήστες πρέπει να καρφιτσώνεται από άλλους χρήστες ή αυτόνομες εφαρμογές, όπως η υπηρεσία Concordia Pinner, ώστε να είναι διαθέσιμο. Αν το περιεχόμενο δεν καρφιτσωθεί, τότε θα είναι διαθέσιμο στους υπόλοιπους χρήστες μόνο από -τον δημιουργό του, έτσι αν αυτός δεν είναι ενεργός στο δίκτυο, το περιεχόμενο θα είναι αδύνατο να βρεθεί. +Η υπηρεσία αυτή υλοποιήθηκε για να εγγυηθεί η διαθεσιμότητα του περιεχομένου του συστήματος που αποθηκεύεται στο IPFS (τίτλοι θεμάτων, περιεχόμενο μηνυμάτων και άλλα). Όπως προαναφέρθηκε στην ενότητα \ref{section:2-7-ipfs}, το περιεχόμενο που αναρτούν οι χρήστες στο IPFS πρέπει να καρφιτσώνεται από άλλους χρήστες ή αυτόνομες εφαρμογές, όπως η υπηρεσία Concordia Pinner, ώστε να παραμένει σίγουρα διαθέσιμο. Αν το περιεχόμενο δεν καρφιτσωθεί, τότε θα είναι διαθέσιμο στους υπόλοιπους χρήστες μόνο από +τον δημιουργό του και, έτσι, αν αυτός δεν είναι ενεργός στο δίκτυο το περιεχόμενο θα είναι αδύνατο να ανακτηθεί. -Η υπηρεσία συνδέεται στο blockchain από όπου παρακολουθεί την κατάσταση του συστήματος και "ακούει" για νέους χρήστες, θέματα, μηνύματα και ψηφοφορίες. Η υπηρεσία συνδέεται επίσης στο IPFS, έτσι όταν δημιουργηθεί νέο περιεχόμενο στο σύστημα το καρφιτσώνει αυτόματα. Με αυτό τον τρόπο, διατηρώντας την υπηρεσία πάντα διαθέσιμη, για παράδειγμα εκτελώντας τη σε περιβάλλον διακομιστή (server), διαβεβαιώνεται η διαθεσιμότητα του περιεχομένου. +Η υπηρεσία συνδέεται στο blockchain από όπου παρακολουθεί την κατάσταση του συστήματος και "ακούει" για νέους χρήστες, θέματα, μηνύματα και ψηφοφορίες. Η υπηρεσία συνδέεται επίσης στο IPFS και όταν δημιουργείται νέο περιεχόμενο στο σύστημα το καρφιτσώνει αυτόματα. Με αυτό τον τρόπο, διατηρώντας την υπηρεσία πάντα διαθέσιμη, για παράδειγμα εκτελώντας τη σε περιβάλλον διακομιστή (server), διαβεβαιώνεται η διαθεσιμότητα του περιεχομένου. \subsubsection{Διανομή} diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.5.concordia-contracts-provider-service.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.5.concordia-contracts-provider-service.tex index 07e17ed..2195597 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.5.concordia-contracts-provider-service.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.5.concordia-contracts-provider-service.tex @@ -2,7 +2,7 @@ \subsubsection{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία 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}. +Η υπηρεσία Contracts Provider αποτελεί μία βοηθητική υπηρεσία η οποία υλοποιεί ένα απλό αποθετήριο για τα \textenglish{contract artifact}. Είναι γραμμένη σε JavaScript και διαθέτει δύο HTTP \textenglish{endpoint}, ένα για τη μεταφόρτωση (upload) των artifact προς την υπηρεσία και ένα για τη λήψη (download) από την υπηρεσία. Η υπηρεσία υποστηρίζει επίσης την επισύναψη ετικετών στα artifact, όπως της έκδοσης (version) ή του κλαδιού ανάπτυξης (branch, για παράδειγμα \textenglish{master/develop}). Η αρχιτεκτονική της φαίνεται στο σχήμα \ref{figure:4-3-concordia-contracts-provider-architecture}. \vspace{.5\baselineskip} @@ -13,8 +13,8 @@ \label{figure:4-3-concordia-contracts-provider-architecture} \end{figure} -Η υπηρεσία χρησιμοποιείται σε μία προσπάθεια αποσύνδεσης της βασικής εφαρμογής που υλοποιεί η υπηρεσία Concordia Application από μία συγκεκριμένη έκδοση των contract. Οι λόγοι που αυτό είναι επιθυμητό αναπτύχθηκαν στην περιγραφή της υπηρεσίας Concordia \textenglish{Application} (υποενότητα \ref{subsection:4-3-2-concordia-application-service}). Ωστόσο, η υπηρεσία Contracts Provider αποτελεί σημείο κεντροποίησης του συστήματος, για το λόγο αυτό θεωρείται προσωρινή λύση, η οποία θα μπορούσε να αντικατασταθεί από αποκεντρωτικές λύσεις όπως η μεταφόρτωση των artifacts στο IPFS και ο διαμοιρασμός τους από εκεί. +Η υπηρεσία χρησιμοποιείται σε μία προσπάθεια αποσύνδεσης της βασικής εφαρμογής που υλοποιεί η υπηρεσία Concordia Application από μία συγκεκριμένη έκδοση των contract. Οι λόγοι που αυτό είναι επιθυμητό αναπτύχθηκαν στην περιγραφή της υπηρεσίας Concordia \textenglish{Application} (υποενότητα \ref{subsection:4-3-2-concordia-application-service}). Ωστόσο, η υπηρεσία Contracts Provider αποτελεί σημείο κεντροποίησης του συστήματος και για αυτόν τον λόγο θεωρείται προσωρινή λύση, η οποία θα μπορούσε να αντικατασταθεί από αποκεντρωτικές λύσεις όπως η μεταφόρτωση των artifact στο IPFS και ο διαμοιρασμός τους από εκεί. \subsubsection{Διανομή} -Η υπηρεσία αυτή γίνεται διαθέσιμη για χρήση ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. Οι χρήστες μπορούν χρησιμοποιώντας μεταβλητές περιβάλλοντος να αλλάξουν παραμέτρους της εκτέλεσης, όπως τη διαδρομή αποθήκευσης των μεταφορτωμένων contract artifacts. \ No newline at end of file +Η υπηρεσία αυτή γίνεται διαθέσιμη για χρήση ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. Οι χρήστες μπορούν, χρησιμοποιώντας μεταβλητές περιβάλλοντος, να αλλάξουν παραμέτρους της εκτέλεσης, όπως τη διαδρομή αποθήκευσης των μεταφορτωμένων \textenglish{contract artifact}. \ No newline at end of file diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.6.ganache-service.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.6.ganache-service.tex index 045b728..e449fcc 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.6.ganache-service.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.6.ganache-service.tex @@ -6,4 +6,4 @@ \subsubsection{Διανομή} -Για τη χρήση της υπηρεσίας αυτής αναπτύχθηκε μία νέα εικόνα Docker που βασίζεται στην επίσημη εικόνα που διατίθεται από τη σουίτα και προσθέτει μερικές χρήσιμες λειτουργίες, όπως η δυνατότητα αποκάλυψης των κλειδιών που δημιουργούνται κατά την εκτέλεση. Η υπηρεσία γίνεται διαθέσιμη για χρήση ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. Η εικόνα παρέχει τη δυνατότητα τροποποίησης των παραμέτρων εκτέλεσης με χρήση μεταβλητών περιβάλλοντος. Με αυτόν τον τρόπο οι προγραμματιστές μπορούν να αλλάξουν τον αριθμό των λογαριασμών που θα δημιουργηθούν, το ποσό του ETH που θα λάβει κάθε λογαριασμός, καθώς και άλλες μεταβλητές. \ No newline at end of file +Για τη χρήση αυτής της υπηρεσίας αναπτύχθηκε μία νέα εικόνα Docker που βασίζεται στην επίσημη εικόνα που διατίθεται από τη σουίτα και προσθέτει μερικές χρήσιμες λειτουργίες, όπως η δυνατότητα αποκάλυψης των κλειδιών που δημιουργούνται κατά την εκτέλεση. Η υπηρεσία γίνεται διαθέσιμη για χρήση ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. Η εικόνα παρέχει τη δυνατότητα τροποποίησης των παραμέτρων εκτέλεσης, μέσω της χρήσης μεταβλητών περιβάλλοντος. Με αυτόν τον τρόπο οι προγραμματιστές μπορούν να αλλάξουν τον αριθμό των λογαριασμών που θα δημιουργηθούν, το ποσό του ETH που θα λάβει κάθε λογαριασμός, καθώς και άλλες μεταβλητές. \ No newline at end of file diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.7.rendezvous-server-service.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.7.rendezvous-server-service.tex index 18f826a..d98d6c8 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.7.rendezvous-server-service.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.7.rendezvous-server-service.tex @@ -6,4 +6,4 @@ \subsubsection{Διανομή} -Η υπηρεσία αυτή είναι διαθέσιμη για χρήση από τους δημιουργούς της τόσο ως εφαρμογή μέσω του αποθετηρίου λογισμικού npm αλλά και ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. \ No newline at end of file +Αυτή η υπηρεσία είναι διαθέσιμη για χρήση από τους δημιουργούς της τόσο ως εφαρμογή μέσω του αποθετηρίου λογισμικού npm, αλλά και ως Docker image μέσω του αποθετηρίου εικόνων Docker Hub. \ No newline at end of file diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.8.service-communication.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.8.service-communication.tex index 2e28c41..7618f70 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.8.service-communication.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.8.service-communication.tex @@ -1,6 +1,6 @@ \subsection{Διασύνδεση υπηρεσιών} \label{subsection:4-3-8-service-communication} -Στο μοντέλο των μικροϋπηρεσιών, βασικό χαρακτηριστικό είναι η επικοινωνία των ξεχωριστών υπηρεσιών και η ανταλλαγή μηνυμάτων για την επίτευξη των λειτουργικοτήτων του συστήματος. Σε αυτήν την υποενότητα θα αναλυθεί ο τρόπος με τον οποίο οι μικροϋπηρεσίες επικοινωνούν μεταξύ τους, καθώς και η φύση και το περιεχόμενο των μηνυμάτων που ανταλλάσουν. +Στο μοντέλο των μικροϋπηρεσιών, βασικό χαρακτηριστικό είναι η επικοινωνία των ξεχωριστών υπηρεσιών και η ανταλλαγή μηνυμάτων για την επίτευξη των λειτουργικοτήτων του συστήματος. Σε αυτήν την υποενότητα θα αναλυθεί ο τρόπος με τον οποίον οι μικροϋπηρεσίες επικοινωνούν μεταξύ τους, καθώς και η φύση και το περιεχόμενο των μηνυμάτων που ανταλλάσουν. Στο παρακάτω σχήμα (σχήμα \ref{figure:4-3-communications-graph}) φαίνεται ο γράφος που οπτικοποιεί τα κανάλια επικοινωνίας μεταξύ των μικροϋπηρεσιών, καθώς και τα κανάλια επικοινωνίας των μικροϋπηρεσιών με το blockchain. @@ -14,13 +14,13 @@ Εδώ αναλύεται η επικοινωνία κάθε μικροϋπηρεσίας: \begin{itemize} - \item \textbf{Contracts Migrator}: Η υπηρεσία εκτελεί αίτημα HTTP κατά την μεταφόρτωση των \textenglish{contracts} στο Ethereum blockchain. Eπίσης, εκτελεί αίτημα HTTP για την μεταφόρτωση των contract artifacts στην υπηρεσία Contracts Provider. + \item \textbf{Contracts Migrator}: Η υπηρεσία εκτελεί αίτημα HTTP κατά τη μεταφόρτωση των \textenglish{contract} στο Ethereum blockchain. Eπίσης, εκτελεί αίτημα HTTP για την μεταφόρτωση των \textenglish{contract artifact} στην υπηρεσία Contracts Provider. - \item \textbf{Concordia Application}: Η υπηρεσία εκτελεί αίτημα HTTP για την λήψη των contract \textenglish{artifacts} από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για την διενέργεια συναλλαγών στο Ethereum blockchain και, τέλος, δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server, για την ανακάλυψη ομότιμων χρηστών (peers) στο δίκτυο IPFS. + \item \textbf{Concordia Application}: Η υπηρεσία εκτελεί αίτημα HTTP για τη λήψη των \textenglish{contract artifact} από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για τη διενέργεια συναλλαγών στο Ethereum blockchain και, τέλος, δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server, για την ανακάλυψη ομότιμων χρηστών (peers) στο δίκτυο IPFS. - \item \textbf{Pinner}: Η υπηρεσία εκτελεί αίτημα HTTP για την λήψη των contract artifacts από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για την ανανέωση και παρατήρηση της κατάστασης του contract στο Ethereum blockchain και τέλος δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server για την ανακάλυψη peers στο δίκτυο IPFS. + \item \textbf{Pinner}: Η υπηρεσία εκτελεί αίτημα HTTP για τη λήψη των \textenglish{contract artifact} από την υπηρεσία Contracts Provider, εκτελεί αιτήματα HTTP για την ανανέωση και παρατήρηση της κατάστασης του contract στο Ethereum blockchain και τέλος δημιουργεί κανάλι επικοινωνίας UDP με την υπηρεσία Rendezvous Server για την ανακάλυψη peer στο δίκτυο IPFS. - \item \textbf{Rendezvous Server}: Η υπηρεσία διατηρεί ανοιχτά κανάλια επικοινωνίας UDP με τους ομότιμους χρήστες, μέσω των οποίων ενημερώνει την λίστα των διαθέσιμων, ενεργών χρηστών. + \item \textbf{Rendezvous Server}: Η υπηρεσία διατηρεί ανοιχτά κανάλια επικοινωνίας UDP με τους ομότιμους χρήστες, μέσω των οποίων ενημερώνει τη λίστα των διαθέσιμων, ενεργών χρηστών. \item \textbf{Contracts Provider}: Η υπηρεσία δεν υποκινεί καμία επικοινωνία, παρά μόνο απαντά σε αιτήματα επικοινωνίας από άλλες υπηρεσίες. \end{itemize} \ No newline at end of file diff --git a/chapters/4.application-implementation/4.5.implemented-parts.tex b/chapters/4.application-implementation/4.5.implemented-parts.tex index ab54fb8..d733992 100644 --- a/chapters/4.application-implementation/4.5.implemented-parts.tex +++ b/chapters/4.application-implementation/4.5.implemented-parts.tex @@ -2,7 +2,7 @@ Όπως αναλύθηκε στην προηγούμενη ενότητα, κατά την υλοποίηση εμφανίστηκαν διάφορα προβλήματα που δεν είχαν προβλεφθεί και τα οποία προκάλεσαν καθυστερήσεις στην ολοκλήρωση των task. Εξαιτίας αυτών των καθυστερήσεων έγιναν διάφορες αναδιαμορφώσεις του προγραμματισμού των Sprint, καθώς και διαπραγματεύσεις ως προς τη σημαντικότητα των χαρακτηριστικών. Από τον επανασχεδιασμό και τις προσαρμογές αυτές προέκυψαν μερικές αλλαγές στο τελικό σετ των χαρακτηριστικών της πλατφόρμας σε σχέση με ό,τι είχε αρχικά προδιαγραφεί. -Τα χαρακτηριστικά και οι αντίστοιχες Λειτουργικές Απαιτήσεις που τελικά υλοποιήθηκαν είναι οι εξής: +Τα χαρακτηριστικά και οι αντίστοιχες Λειτουργικές Απαιτήσεις που τελικά υλοποιήθηκαν είναι τα εξής: \begin{itemize} \item Η εγγραφή χρήστη και η δημιουργία των τοπικών του βάσεων, όπως περιγράφονται στις \ref{srs:functional-srs-sign-up} \& \ref{srs:functional-srs-create-user-databases} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-signup}. diff --git a/chapters/5.conclusions-open-areas/5.1.conclusions.tex b/chapters/5.conclusions-open-areas/5.1.conclusions.tex index 4f577f9..2faf381 100644 --- a/chapters/5.conclusions-open-areas/5.1.conclusions.tex +++ b/chapters/5.conclusions-open-areas/5.1.conclusions.tex @@ -11,8 +11,9 @@ \begin{enumitemcenteredfigure} \includegraphics[width=.50\textwidth]{assets/figures/chapter-5/5.1.xkcd_2030_voting_software} - \caption{\url{https://xkcd.com/2030/}} + \caption[Voting software]{Voting software\footnotemark} \end{enumitemcenteredfigure} + \footnotetext{\url{https://xkcd.com/2030/}} \item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, τα οποία σχετίζονται κυρίως με την εύρεση των peers (το οποίο βασίζεται προσωρινά σε signalling servers\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}, καθιστώντας το P2P δίκτυο υβριδικό) και το replication των δεδομένων. \end{itemize} diff --git a/chapters/5.conclusions-open-areas/5.2.open-areas.tex b/chapters/5.conclusions-open-areas/5.2.open-areas.tex index 09274ad..3cbe5f9 100644 --- a/chapters/5.conclusions-open-areas/5.2.open-areas.tex +++ b/chapters/5.conclusions-open-areas/5.2.open-areas.tex @@ -10,11 +10,11 @@ \subsection{Διανομή των Ethereum token}\label{subsection:5-2-2-token-distribution} -Στον φυσικό κόσμο, η έγκυρη και ανώνυμη διανομή ενός συνόλου μοναδικών πιστοποιητικών αυθεντικοποίησης στα μέλη μίας κοινότητας θα μπορούσε να ήταν μία διαδικασία, η οποία να απαιτούσε την φυσική παρουσία των χρηστών και την επιλογή ενός λαχνού-πιστοποιητικού από μία κληρωτίδα. Σε αυτήν την περίπτωση θα έπρεπε είτε να υπήρχε ολομέλεια και, έτσι, διαμοιρασμός της εμπιστοσύνης σε όλα τα μέλη, είτε να υπήρχε μεταβίβαση της εμπιστοσύνης σε μία επιτροπή. +Στον φυσικό κόσμο, η έγκυρη και ανώνυμη διανομή ενός συνόλου μοναδικών πιστοποιητικών αυθεντικοποίησης στα μέλη μίας κοινότητας θα μπορούσε να ήταν μία διαδικασία, η οποία να απαιτούσε τη φυσική παρουσία των χρηστών και την τυχαία επιλογή ενός λαχνού-πιστοποιητικού από μία κληρωτίδα. Σε αυτήν την περίπτωση θα έπρεπε είτε να υπήρχε ολομέλεια και, έτσι, διαμοιρασμός της εμπιστοσύνης σε όλα τα μέλη, είτε να υπήρχε μεταβίβαση της εμπιστοσύνης σε μία επιτροπή. Στον ψηφιακό κόσμο, το παραπάνω ζήτημα αποτελεί μία ιδιαίτερη πρόκληση με ποικίλες προσεγγίσεις σχετικά με την επιλογή των συστημάτων που θα χρησιμοποιηθούν, καθώς και των οντοτήτων στις οποίες θα εκχωρηθεί εμπιστοσύνη. -Στην παρούσα εφαρμογή, η υλοποίηση μηχανισμών για την ανώνυμη διανομή των Ethereum token των κοινοτήτων με τρόπο που να μην απαιτείται η εκχώρηση εμπιστοσύνης σε τρίτους, τέθηκε εκτός του πλαισίου της εργασίας, εξαιτίας της παρέκκλισης από το κεντρικό θέμα και της πολυπλοκότητας της. Όπως είναι σχεδιασμένη αυτήν τη στιγμή, η Concordia δύναται να υποστηρίξει ποικίλες αφηρημένες διαδικασίες οι οποίες να κατοχυρώνουν την εγκυρότητα των εκάστοτε μελών, αλλά όχι την ανωνυμία τους. Εκείνη, όσο η διαδικασία βασίζεται σε κάποια κεντρική οντότητα αυθεντικοποίησης, δε μπορεί να διασφαλιστεί, καθώς θα απαιτεί πάντα την εκχώρηση εμπιστοσύνης από τον τελικό χρήστη στα υπολογιστικά συστήματα της πρώτης. Η εμφάνιση του προβλήματος οφείλεται στο γεγονός ότι η ανωνυμοποίηση των πιστοποιητικών θα πρέπει να λάβει χώρα εντός των των προαναφερθέντων συστημάτων, τα οποία, ως επί το πλείστον, θα είναι συγκεντρωτικής λογικής. +Στην παρούσα εφαρμογή, η υλοποίηση μηχανισμών για την ανώνυμη διανομή των Ethereum token των κοινοτήτων με τρόπο που να μην απαιτείται η εκχώρηση εμπιστοσύνης σε τρίτους, τέθηκε εκτός του πλαισίου της εργασίας, εξαιτίας της παρέκκλισης από το κεντρικό θέμα και της πολυπλοκότητας της. Όπως είναι σχεδιασμένη αυτήν τη στιγμή, η Concordia δύναται να υποστηρίξει ποικίλες προσαρμοσμένες διαδικασίες οι οποίες να κατοχυρώνουν την εγκυρότητα των εκάστοτε μελών, αλλά όχι την ανωνυμία τους. Εκείνη, όσο η διαδικασία βασίζεται σε κάποια κεντρική οντότητα αυθεντικοποίησης, δε μπορεί να διασφαλιστεί, καθώς θα απαιτεί πάντα την εκχώρηση εμπιστοσύνης από τον τελικό χρήστη στα υπολογιστικά συστήματα της πρώτης. Η εμφάνιση του προβλήματος οφείλεται στο γεγονός ότι η ανωνυμοποίηση των πιστοποιητικών θα πρέπει να λάβει χώρα εντός των των προαναφερθέντων συστημάτων, τα οποία, ως επί το πλείστον, θα είναι συγκεντρωτικής λογικής. Για παράδειγμα, έστω ότι μία κεντρική αρχή με δικό της σύστημα αυθεντικοποίησης αρχιτεκτονικής πελάτη-εξυπηρετητή αποφασίζει να συμμετάσχει στην πλατφόρμα της Concordia, δημιουργώντας μία κοινότητα και ορίζοντας ένα εξωτερικό smart contract για τα token των μελών της. Ο μηχανισμός διανομής των token θα μπορούσε να ήταν η εγγραφή του χρήστη στο κεντρικό σύστημα της αρχής, η δήλωση μίας Ethereum διεύθυνσής του και η αποστολή ενός token αυθεντικοποίησης σε αυτήν. Κάτι τέτοιο θα έδινε τη δυνατότητα στους διαχειριστές του συστήματος να εντοπίζουν με ευκολία τις πραγματικές ταυτότητες των μελών της κοινότητας πίσω από κάθε token της, αίροντας, έτσι, την ανωνυμία των τελευταίων. @@ -45,4 +45,4 @@ Ορισμένες ενδεικτικές χρήσεις του είναι η συνεργασία του με τους μηχανισμούς που περιγράφονται στις υποενότητες \ref{subsection:5-2-1-ethereum-fees-management} και \ref{subsection:5-2-3-alternative-voting-systems}. Για παράδειγμα, η ισχύς της ψήφου ενός μέλους μίας κοινότητας ή το ποσό των τελών που καλείται να καταβάλλει στο Ethereum θα μπορούσαν να υπολογίζονται αναλογα με τον βαθμό εμπιστοσύνης που έχει αποκτήσει. -Υιοθετώντας την αφηρημένη λογική που περιγράφηκε στα συστήματα ψηφοφορίας της προηγούμενης παραγράφου, είναι εφικτό να παρέχεται η δυνατότητα σε κάθε κοινότητα να επιλέγει μεταξύ ενός συνόλου διαφορετικών συστημάτων απόδοσης εμπιστοσύνης για τα μέλη της, μέσω εναλλακτικών reputation smart contract. Ήδη υπάρχει μία πλούσια γκάμα τέτοιων συστημάτων που μπορούν να υλοποιηθούν επί του Ethereum, με την ταξινομία τους να ορίζεται επί μίας πληθώρας ανεξάρτητων διαστάσεων.\cite{5.2-taxonomy-of-reputation-systems} Ωστόσο, η περαιτέρω ανάλυση τους, είναι θέμα που εκτείνεται πέρα από τα πλαίσια της παρούσας διπλωματικής εργασίας. +Υιοθετώντας την αφηρημένη λογική που περιγράφηκε στα συστήματα ψηφοφορίας της προηγούμενης παραγράφου, είναι εφικτό να παρέχεται η δυνατότητα σε κάθε κοινότητα να επιλέγει μεταξύ ενός συνόλου διαφορετικών συστημάτων απόδοσης εμπιστοσύνης για τα μέλη της, μέσω εναλλακτικών reputation smart contract. Ήδη υπάρχει μία πλούσια γκάμα τέτοιων συστημάτων που μπορούν να υλοποιηθούν επί του Ethereum, με την ταξινομία τους να ορίζεται επί μίας πληθώρας ανεξάρτητων διαστάσεων\cite{5.2-taxonomy-of-reputation-systems}. Ωστόσο, η περαιτέρω ανάλυση τους είναι θέμα που εκτείνεται πέρα από τα πλαίσια της παρούσας διπλωματικής εργασίας. diff --git a/chapters/appendix/appendix-b.tex b/chapters/appendix/appendix-b.tex index 81ade60..c4abd4c 100644 --- a/chapters/appendix/appendix-b.tex +++ b/chapters/appendix/appendix-b.tex @@ -7,7 +7,7 @@ \captionsetup{labelformat=AppendixBTables} \setcounter{table}{0} -Στο παρόν παράρτημα παρατίθενται πίνακες με στατιστικά στοιχεία του κώδικα της εφαρμογής Concordia, καθώς και των υλοποιημένων βιβλιοθηκών. Συγκεκριμένα, πραγματοποιήθηκε καταμέτρηση των αρχείων και των γραμμών κώδικα μέσω του προγραμμάτος cloc\footnote{\url{https://github.com/AlDanial/cloc}}, διαδικασία στην οποία αγνοήθηκαν αυτόματα configuration και auto-generated αρχεία (π.χ. yarn.lock, .gitignore). +Στο παρόν παράρτημα παρατίθενται πίνακες με στατιστικά στοιχεία του κώδικα της εφαρμογής Concordia, καθώς και των υλοποιημένων βιβλιοθηκών. Συγκεκριμένα, πραγματοποιήθηκε καταμέτρηση των αρχείων και των γραμμών κώδικα μέσω του προγραμμάτος cloc\footnote{\url{https://github.com/AlDanial/cloc}} (27-1-2022), διαδικασία στην οποία αγνοήθηκαν αυτόματα configuration και auto-generated αρχεία (π.χ. yarn.lock, .gitignore). \begin{center} \codestatstable{Concordia}{https://gitlab.com/ecentrics/concordia} diff --git a/thesis.pdf b/thesis.pdf index 61225a9..dbf5f24 100644 Binary files a/thesis.pdf and b/thesis.pdf differ