Ezerous
3 years ago
25 changed files with 81 additions and 71 deletions
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
@ -1,9 +1,9 @@ |
|||
\subsection{Αρθρώματα} \label{subsection:4-3-1-software-units} |
|||
\subsection{Αρθρώματα} \label{subsection:4-3-1-software-modules} |
|||
|
|||
Σε αυτήν την υποενότητα θα περιγραφούν με μεγαλύτερη λεπτομέρεια τα αρθρώματα που αναπτύχθηκαν. |
|||
|
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.concordia-shared-unit} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.concordia-contracts-unit} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.eth-identity-provider-unit} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.drizzle-unit} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-units/4.3.1.breeze-unit} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-modules/4.3.1.1.concordia-shared-module} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-modules/4.3.1.2.concordia-contracts-module} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-modules/4.3.1.3.eth-identity-provider-module} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-modules/4.3.1.4.drizzle-module} |
|||
\input{chapters/4.application-implementation/4.3.implementation-architecture/4.3.1.software-modules/4.3.1.5.breeze-module} |
@ -0,0 +1,5 @@ |
|||
\subsubsection{Άρθρωμα concordia-shared} \label{subsubsection:4-3-1-1-concordia-shared-module} |
|||
|
|||
Το άρθρωμα concordia-shared αποτελεί μία βιβλιοθήκη χρήσιμων εργαλείων και σταθερών. Εδώ περιέχεται όλο το λογισμικό το οποίο πρέπει ή είναι επιθυμητό να συμπεριφέρεται με τον ίδιο τρόπο συνολικά στο σύστημα, όπως για παράδειγμα μέθοδοι παραμετροποίησης των υπηρεσιών και μέθοδοι καταγραφής (logging). Το παρόν άρθρωμα χρησιμοποιείται από το άρθρωμα \hyperref[subsubsection:4-3-1-2-concordia-contracts-module]{concordia-contracts}, καθώς και από τις υπηρεσίες \hyperref[subsection:4-3-2-concordia-application-service]{Concordia Application}, \hyperref[subsection:4-3-4-concordia-pinner-service]{Concordia Pinner} και \hyperref[subsection:4-3-5-concordia-contracts-provider-service]{Concordia Contracts Provider}. |
|||
|
|||
Γίνεται διαθέσιμο για χρήση με τη μορφή τοπικής βιβλιοθήκης με τη χρήση της δυνατότητας διαχείρισης μοναδικού αποθετηρίου κώδικα (monorepo) yarn workspaces{\footnote{\url{https://yarnpkg.com/features/workspaces}}}. |
@ -1,5 +1,5 @@ |
|||
\subsubsection{Άρθρωμα concordia-contracts} \label{subsubsection:4-3-1-concordia-contracts-unit} |
|||
\subsubsection{Άρθρωμα concordia-contracts} \label{subsubsection:4-3-1-2-concordia-contracts-module} |
|||
|
|||
Το παρόν άρθρωμα είναι αυτό στο οποίο αναπτύσσονται τα contract που χρησιμοποιούνται από την εφαρμογή και το οποίο αναλαμβάνει τη μεταγλώττισή τους από κώδικα γλώσσας Solidity στην κατάλληλη τελική μορφή JSON. Παρέχει επίσης σενάρια ενεργειών (scripts), μέσω των οποίων τα contract μεταφορτώνονται στο blockchain, καθώς και στην υπηρεσία \hyperref[subsection:4-3-5-concordia-contracts-provider-service]{Concordia Contracts Provider}. Επιπλέον, το concordia-contracts αποτελεί βιβλιοθήκη, η οποία μετά τη μεταγλώττιση και τη μεταφόρτωση των contract στο blockchain παρέχει τα contract artifact, τα οποία χρησιμοποιούνται από τις υπηρεσίες \hyperref[subsection:4-3-2-concordia-application-service]{Concordia Application} και \hyperref[subsection:4-3-4-concordia-pinner-service]{Concordia Pinner}. |
|||
Το παρόν άρθρωμα είναι αυτό στο οποίο αναπτύσσονται τα contract που χρησιμοποιούνται από την εφαρμογή και το οποίο αναλαμβάνει τη μεταγλώττισή τους από κώδικα γλώσσας Solidity στην κατάλληλη τελική μορφή JSON. Παρέχει επίσης σενάρια ενεργειών (scripts), μέσω των οποίων τα contract μεταφορτώνονται στο blockchain, καθώς και στην υπηρεσία \hyperref[subsection:4-3-5-concordia-contracts-provider-service]{Concordia Contracts Provider}. Επιπλέον, το concordia-contracts αποτελεί βιβλιοθήκη, η οποία, μετά τη μεταγλώττιση και τη μεταφόρτωση των contract στο blockchain, παρέχει τα contract artifact, τα οποία χρησιμοποιούνται από τις υπηρεσίες \hyperref[subsection:4-3-2-concordia-application-service]{Concordia Application} και \hyperref[subsection:4-3-4-concordia-pinner-service]{Concordia Pinner}. |
|||
|
|||
Το άρθρωμα αυτό γίνεται διαθέσιμο για χρήση με τη μορφή τοπικής βιβλιοθήκης με τη χρήση της δυνατότητας yarn workspaces. |
@ -1,10 +1,11 @@ |
|||
\subsubsection{Άρθρωμα eth-identity-provider} \label{subsubsection:4-3-1-eth-identity-provider-unit} |
|||
\subsubsection{Άρθρωμα eth-identity-provider} \label{subsubsection:4-3-1-3-eth-identity-provider-module} |
|||
|
|||
Η λειτουργία της βάσης OrbitDB επιτρέπει τη χρήση προσαρμοσμένων orbit-db-identity-provider, οι οποίοι θα δημιουργούν και θα επικυρώνουν |
|||
Η λειτουργία της βάσης OrbitDB επιτρέπει τη χρήση προσαρμοσμένων orbit-db-identity-provider, οι οποίοι μπορούν να δημιουργούν και να επικυρώνουν |
|||
τα μοναδικά αναγνωριστικά των χρήστών (OrbitDB Identity) βάσει προσαρμοσμένων εξωτερικών αναγνωριστικών (external identifier), όπως παρουσιάζεται στο σχήμα \ref{figure:4-2-4-2-orbit-db-identity}. |
|||
|
|||
Στην περίπτωση της εφαρμογής Concordia είναι χρήσιμο να μπορούν να υπολογιστούν με ντετερμινιστικό τρόπο οι OrbitDB βάσεις δεδομένων του κάθε χρήστη, για λόγους απλότητας και εξοικονόμησης αποθηκευτικού χώρου επί του blockchain. Έτσι, αφού κάθε χρήστης ορίζεται μοναδικά μέσω της διεύθυνσης Ethereum με την οποία εγγράφεται και συνδέεται, αυτή θα πρέπει να αποτελεί και το εξωτερικό αναγνωριστικό στο πεδίο id της OrbitDB Identity. |
|||
|
|||
\newpage |
|||
Για αυτόν το λόγο υλοποιήθηκε το άρθρωμα eth-identity-provider, το οποίο: |
|||
|
|||
\begin{itemize} |
@ -1,7 +1,7 @@ |
|||
\subsubsection{Άρθρωμα drizzle} \label{subsubsection:4-3-1-drizzle-unit} |
|||
\subsubsection{Άρθρωμα drizzle} \label{subsubsection:4-3-1-4-drizzle-module} |
|||
|
|||
Το άρθρωμα 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}}. |
|||
Αυτό το άρθρωμα γίνεται διαθέσιμο για χρήση με τη μορφή βιβλιοθήκης μέσω του μητρώου λογισμικού npm\footnote{\url{https://www.npmjs.com/package/@ecentrics/drizzle}}, ενώ το αποθετήριό του βρίσκεται στο GitLab\footnote{\url{https://gitlab.com/ecentrics/drizzle}}. |
@ -0,0 +1,7 @@ |
|||
\subsubsection{Άρθρωμα breeze} \label{subsubsection:4-3-1-5-breeze-module} |
|||
|
|||
Το άρθρωμα breeze αναπτύχθηκε στα πλαίσια της διπλωματικής εργασίας και αποτελεί μία βιβλιοθήκη περίβλημα (wrapper) της βιβλιοθήκης OrbitDB, η οποία παρέχει ένα Redux store. |
|||
|
|||
Με τη συμπερίληψη του store του αρθρώματος στο κεντρικό Redux store της εφαρμογής, παρέχεται η δυνατότητα εκτέλεσης των λειτουργιών των OrbitDB βάσεων εντός του γενικότερου flow του frontend. Έτσι, οι προγραμματιστικές διεπαφές που προσφέρει η OrbitDB χρησιμοποιούνται πλέον μέσα από actions, reducers και middleware. |
|||
|
|||
Αυτό το άρθρωμα γίνεται διαθέσιμο για χρήση με τη μορφή βιβλιοθήκης μέσω του μητρώου λογισμικού npm\footnote{\url{https://www.npmjs.com/package/@ecentrics/breeze}}, ενώ το αποθετήριό του βρίσκεται στο GitLab\footnote{\url{https://gitlab.com/ecentrics/breeze}}. |
@ -1,7 +0,0 @@ |
|||
\subsubsection{Άρθρωμα breeze} \label{subsubsection:4-3-1-breeze-unit} |
|||
|
|||
Το άρθρωμα αυτό αναπτύχθηκε στα πλαίσια της διπλωματικής εργασίας και αποτελεί μία βιβλιοθήκη περίβλημα (wrapper) της βιβλιοθήκης OrbitDB, η οποία παρέχει ένα Redux store. |
|||
|
|||
Με τη συμπερίληψη του store του αρθρώματος στο κεντρικό Redux store της εφαρμογής, παρέχεται η δυνατότητα εκτέλεσης των λειτουργιών των OrbitDB βάσεων εντός του γενικότερου flow του frontend της εφαρμογής. Έτσι, οι προγραμματιστικές διεπαφές που προσφέρει η Orbit χρησιμοποιούνται πλέον μέσα από actions, reducers και middleware. |
|||
|
|||
Το άρθρωμα αυτό γίνεται διαθέσιμο για χρήση με τη μορφή βιβλιοθήκης μέσω του μητρώου λογισμικού npm\footnote{\url{https://www.npmjs.com/package/@ecentrics/breeze}}, ενώ το αποθετήριό του βρίσκεται στο GitLab\footnote{\url{https://gitlab.com/ecentrics/breeze}}. |
@ -1,5 +0,0 @@ |
|||
\subsubsection{Άρθρωμα concordia-shared} \label{subsubsection:4-3-1-concordia-shared-unit} |
|||
|
|||
Το άρθρωμα concordia-shared αποτελεί μία βιβλιοθήκη χρήσιμων εργαλείων και σταθερών. Εδώ περιέχεται όλο το λογισμικό το οποίο πρέπει ή είναι επιθυμητό να συμπεριφέρεται με τον ίδιο τρόπο συνολικά στο σύστημα, όπως για παράδειγμα μέθοδοι παραμετροποίησης των υπηρεσιών και μέθοδοι καταγραφής (logging). Το παρόν άρθρωμα χρησιμοποιείται από το άρθρωμα \hyperref[subsubsection:4-3-1-concordia-contracts-unit]{concordia-contracts}, καθώς και από τις υπηρεσίες \hyperref[subsection:4-3-2-concordia-application-service]{Concordia Application}, \hyperref[subsection:4-3-4-concordia-pinner-service]{Concordia Pinner} και \hyperref[subsection:4-3-5-concordia-contracts-provider-service]{Concordia Contracts Provider}. |
|||
|
|||
Το άρθρωμα αυτό γίνεται διαθέσιμο για χρήση με τη μορφή τοπικής βιβλιοθήκης με τη χρήση της δυνατότητας διαχείρισης μοναδικού αποθετηρίου κώδικα (monorepo) yarn workspaces{\footnote{\url{https://yarnpkg.com/features/workspaces}}}. |
@ -1,20 +1,20 @@ |
|||
\section{Προβλήματα ανάπτυξης} \label{section:4-4-problems-faced} |
|||
|
|||
Σε αυτήν την ενότητα περιγράφονται οι μεγαλύτερες δυσκολίες που αντιμετωπίστηκαν κατά την ανάπτυξη της πλατφόρμας. Αυτές μπορεί να αναφέρονται σε τεχνικά θέματα, αλλά και στις κοινωνικές και πολιτισμικές συνθήκες που επικρατούν στον χώρο των DApps και των crypto γενικότερα. |
|||
Σε αυτήν την ενότητα περιγράφονται οι μεγαλύτερες δυσκολίες που αντιμετωπίστηκαν κατά την ανάπτυξη της πλατφόρμας. Αυτές μπορεί να αναφέρονται σε τεχνικά θέματα, αλλά και στις κοινωνικές και πολιτισμικές συνθήκες που επικρατούν στον χώρο των DApp και των crypto γενικότερα. |
|||
|
|||
Μία από τις μεγαλύτερες τροχοπέδες που καθυστέρησε σοβαρά την ανάπτυξη ήταν η πρωιμότητα των βιβλιοθηκών και των εργαλείων ανάπτυξης. Οι βασικότερες βιβλιοθήκες που χρησιμοποιήθηκαν ήταν σε πρώτο ή δεύτερο πειραματικό στάδιο (alpha και beta phase αντίστοιχα). Συγκεκριμένα: |
|||
|
|||
\begin{itemize} |
|||
\item Όλα τα εργαλεία της σουίτας Truffle ήταν σε alpha phase κατά την ανάπτυξη (κάποια έχουν περάσει σε beta πλέον). |
|||
\item Όλα τα εργαλεία της σουίτας Truffle ήταν σε alpha phase κατά την ανάπτυξη (κάποια έχουν πλέον περάσει σε beta). |
|||
\item Το IPFS (συγκεκριμένα η βιβλιοθήκη js-ipfs) βρίσκεται ακόμα σε alpha έκδοση. |
|||
\item Η OrbitDB βρίσκεται ακόμα σε alpha phase. |
|||
\item Η γλώσσα των contract, Solidity, ακόμα δεν έχει βγάλει version 1.0 καθώς αλλάζει διαρκώς με breaking changes\footnote{Από τη σελίδα του πηγαίου κώδικα \url{https://github.com/ethereum/solidity}.}. |
|||
\item Η γλώσσα των contract, Solidity, δεν έχει εκδώσει ακόμα version 1.0, καθώς αλλάζει διαρκώς με breaking changes\footnote{Από τη σελίδα του πηγαίου κώδικα \url{https://github.com/ethereum/solidity}.}. |
|||
\end{itemize} |
|||
|
|||
Αυτή η έλλειψη ώριμων βιβλιοθηκών και εργαλείων προκάλεσε μείζονα προβλήματα. Συχνά έπρεπε να διορθωθούν προβλήματα των βιβλιοθηκών, ή να γίνει δουλειά που να τα παρακάμπτει. Άλλες φορές απαιτήθηκαν πολλές ώρες αποσφαλμάτωσης και δοκιμών ώστε να λειτουργήσουν τα χαρακτηριστικά που υπόσχονταν τα εργαλεία. |
|||
|
|||
Ένα άλλο πρόβλημα ήταν η έλλειψη εργαλείων για ορισμένες διαδικασίες. Δύο βασικά παραδείγματα αυτού αποτελούν πρώτον η έλλειψη υποστήριξης για integration/end-to-end testing των contract κατά την ανάπτυξη (πλέον υπάρχουν κάποιες λύσεις) και δεύτερον η έλλειψη έτοιμων διαδικασιών, plugin και integration του Jenkins με τα εργαλεία ανάπτυξης και ειδικά με τη σουίτα Truffle. |
|||
|
|||
Σε παρόμοια κατάσταση βρίσκεται και η γενική συναίνεση σχετικά με τα best practices. Σε διάφορα μέρη της ανάπτυξης παρατηρήθηκε ότι δεν υπήρχε κάποια διαμορφωμένη άποψη στην κοινότητα και κάθε ομάδα ανάπτυξης εφάρμοζε την δική της ιδέα. Αυτό καθιστά δύσκολη την ανάπτυξη από αρχάριους προγραμματιστές χωρίς καθοδήγηση. Ένα άλλο σχετικό πρόβλημα που παρατηρήθηκε είναι ότι στον χώρο υπάρχει ακόμα πολύς θόρυβος, δηλαδή σημαντικό μέρος των πηγών που βρίσκονται στο διαδίκτυο είναι αντικρουόμενες ή, σε πολλές περιπτώσεις, οι προτάσεις τους απορρίπτονται από την κοινότητα. |
|||
Σε παρόμοια κατάσταση βρίσκεται και η γενική συναίνεση σχετικά με τα best practices. Σε διάφορα μέρη της ανάπτυξης παρατηρήθηκε ότι δεν υπήρχε κάποια διαμορφωμένη άποψη στην κοινότητα και κάθε ομάδα ανάπτυξης εφάρμοζε την δική της ιδέα. Αυτό καθιστά δύσκολη την ανάπτυξη από αρχάριους προγραμματιστές χωρίς καθοδήγηση. Ένα άλλο σχετικό πρόβλημα που είναι ότι στον χώρο υπάρχει ακόμα πολύς θόρυβος, δηλαδή σημαντικό μέρος των πηγών που βρίσκονται στο διαδίκτυο είναι αντικρουόμενες ή, σε πολλές περιπτώσεις, οι προτάσεις τους απορρίπτονται από την κοινότητα. |
|||
|
|||
Τέλος, ένα μη τεχνικό ζήτημα που έπρεπε να αντιμετωπιστεί είναι η αβεβαιότητα της βιωσιμότητας, της εξέλιξης και της αποδοχής της τεχνολογίας blockchain και των εφαρμογών που βασίζονται σε αυτήν από το ευρύ κοινό. Αυτό συναίνεσε αρνητικά, καθώς δημιούργησε μία επιτακτικότητα προσοχής της εμπειρίας του χρήστη (UX), κάτι που φυσιολογικά δεν αποτελεί σημαντικό μέρος της ανάπτυξης ενός PoC. Η ανάγκη για προσοχή του UX πηγάζει από την ανάγκη για συγκράτηση των χρηστών (user retention), με στόχο την αντιστροφή της αβεβαιότητας και την παροχή μίας γνησίως ευχάριστης εμπειρίας. |
|||
Τέλος, ένα μη τεχνικό ζήτημα που έπρεπε να αντιμετωπιστεί είναι η αβεβαιότητα της βιωσιμότητας, της εξέλιξης και της αποδοχής της τεχνολογίας blockchain και των εφαρμογών που βασίζονται σε αυτήν από το ευρύ κοινό. Αυτό συναίνεσε αρνητικά, καθώς δημιούργησε μία επιτακτικότητα προσοχής της εμπειρίας του χρήστη (UX), κάτι που φυσιολογικά δεν αποτελεί σημαντικό μέρος της ανάπτυξης ενός PoC. Η ανάγκη για προσοχή του UX πηγάζει από την ανάγκη για συγκράτηση των χρηστών (user retention), με στόχο την άρση της αβεβαιότητας και την παροχή μίας γνησίως ευχάριστης εμπειρίας. |
|||
|
Binary file not shown.
Loading…
Reference in new issue