diff --git a/assets/figures/hash-functions-1.png b/assets/figures/chapter-2/2.1.hash-functions-1.png similarity index 100% rename from assets/figures/hash-functions-1.png rename to assets/figures/chapter-2/2.1.hash-functions-1.png diff --git a/assets/figures/hash-functions-2.png b/assets/figures/chapter-2/2.1.hash-functions-2.png similarity index 100% rename from assets/figures/hash-functions-2.png rename to assets/figures/chapter-2/2.1.hash-functions-2.png diff --git a/assets/figures/asymmetric-end-to-end-communication.png b/assets/figures/chapter-2/2.2.asymmetric-end-to-end-communication.png similarity index 100% rename from assets/figures/asymmetric-end-to-end-communication.png rename to assets/figures/chapter-2/2.2.asymmetric-end-to-end-communication.png diff --git a/assets/figures/asymmetric-key-generation.png b/assets/figures/chapter-2/2.2.asymmetric-key-generation.png similarity index 100% rename from assets/figures/asymmetric-key-generation.png rename to assets/figures/chapter-2/2.2.asymmetric-key-generation.png diff --git a/assets/figures/merkle-tree.png b/assets/figures/chapter-2/2.3.merkle-tree.png similarity index 100% rename from assets/figures/merkle-tree.png rename to assets/figures/chapter-2/2.3.merkle-tree.png diff --git a/assets/figures/ethereum-logo.png b/assets/figures/chapter-2/2.6.ethereum-logo.png similarity index 100% rename from assets/figures/ethereum-logo.png rename to assets/figures/chapter-2/2.6.ethereum-logo.png diff --git a/assets/figures/ipfs-logo.png b/assets/figures/chapter-2/2.7.ipfs-logo.png similarity index 100% rename from assets/figures/ipfs-logo.png rename to assets/figures/chapter-2/2.7.ipfs-logo.png diff --git a/assets/figures/merkle-dag.png b/assets/figures/chapter-2/2.7.merkle-dag.png similarity index 100% rename from assets/figures/merkle-dag.png rename to assets/figures/chapter-2/2.7.merkle-dag.png diff --git a/assets/figures/orbitdb-logo.png b/assets/figures/chapter-4/4.3.orbitdb-logo.png similarity index 100% rename from assets/figures/orbitdb-logo.png rename to assets/figures/chapter-4/4.3.orbitdb-logo.png diff --git a/bibliography/references.bib b/bibliography/references.bib index 52cb42f..ce2931a 100644 --- a/bibliography/references.bib +++ b/bibliography/references.bib @@ -20,7 +20,7 @@ title = {The Elliptic Curve Digital Signature Algorithm (ECDSA)}, author = {Johnson, Don and Menezes, Alfred and Vanstone, Scott}, year = 2001, - month = {Aug.}, + month = 8, journal = {International Journal of Information Security}, doi = {10.1007/s102070100002}, url = {https://doi.org/10.1007/s102070100002} @@ -72,7 +72,7 @@ title = {Formalizing and Securing Relationships on Public Networks}, author = {Szabo, Nick}, year = 1997, - month = {Sep.}, + month = 9, journal = {First Monday}, volume = 2, number = 9, @@ -83,7 +83,7 @@ title = {Mastering Ethereum: Building Smart Contracts and DApps}, author = {Andreas M Antonopoulos, Gavin Wood}, publisher = {O'Reilly Media}, - isbn = {1491971940}, + isbn = 1491971940, date = 2018, opturl = {https://cypherpunks-core.github.io/ethereumbook/} } @@ -100,16 +100,16 @@ author = {ProtoSchool}, url = {https://proto.school/merkle-dags/} } -@misc{2.8-orbitdb, +@online{4.2-github-flow, + title = {Understanding the GitHub flow}, + author = {GitHub Guides}, + url = {https://guides.github.com/introduction/flow/} +} +@misc{4.3-orbitdb, title = {OrbitDB}, url = {https://orbitdb.org} } -@misc{2.8-orbitdb-guide, +@misc{4.3-orbitdb-guide, title = {Getting Started with OrbitDB}, url = {https://github.com/orbitdb/orbit-db/blob/main/GUIDE.md} } -@online{4.2-github-flow, - title = {Understanding the GitHub flow}, - author = {GitHub Guides}, - url = {https://guides.github.com/introduction/flow/} -} diff --git a/chapters/0.preamble/0.4.toc.tex b/chapters/0.preamble/0.4.toc.tex index 9fd8e19..d937ccf 100644 --- a/chapters/0.preamble/0.4.toc.tex +++ b/chapters/0.preamble/0.4.toc.tex @@ -1 +1,5 @@ -\tableofcontents\label{toc} \ No newline at end of file +% TOC bookmark solution found here: +% https://tex.stackexchange.com/questions/97024/how-to-add-the-pdf-bookmark-of-toc-without-its-name-contents-in-toc +\clearpage +\pdfbookmark{\contentsname}{toc} +\tableofcontents \label{toc} diff --git a/chapters/2.theoretical-background/2.0.theoretical-background.tex b/chapters/2.theoretical-background/2.0.theoretical-background.tex index 8db6c15..a621d5b 100644 --- a/chapters/2.theoretical-background/2.0.theoretical-background.tex +++ b/chapters/2.theoretical-background/2.0.theoretical-background.tex @@ -6,5 +6,4 @@ \input{chapters/2.theoretical-background/2.4.p2p-networks} \input{chapters/2.theoretical-background/2.5.blockchain} \input{chapters/2.theoretical-background/2.6.ethereum} -\input{chapters/2.theoretical-background/2.7.ipfs} -\input{chapters/2.theoretical-background/2.8.orbit-db} \ No newline at end of file +\input{chapters/2.theoretical-background/2.7.ipfs} \ No newline at end of file diff --git a/chapters/2.theoretical-background/2.1.hash-functions.tex b/chapters/2.theoretical-background/2.1.hash-functions.tex index 0312c2a..afa9a24 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/hash-functions-1.png} + \includegraphics[width=15cm]{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/hash-functions-2.png} + \includegraphics[width=15cm]{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 a1a90d1..96fecd6 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/asymmetric-key-generation.png} + \includegraphics[width=15cm]{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/asymmetric-end-to-end-communication.png} + \includegraphics[width=15cm]{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 c4b1a6a..383c766 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/merkle-tree.png} + \includegraphics[width=15cm]{assets/figures/chapter-2/2.3.merkle-tree.png} \caption{Παράδειγμα δυαδικού δένδρου Merkle} \end{figure} diff --git a/chapters/2.theoretical-background/2.6.ethereum.tex b/chapters/2.theoretical-background/2.6.ethereum.tex index 46a1014..2c29d50 100644 --- a/chapters/2.theoretical-background/2.6.ethereum.tex +++ b/chapters/2.theoretical-background/2.6.ethereum.tex @@ -2,14 +2,14 @@ \begin{figure}[H] \centering - \includegraphics[width=2cm]{assets/figures/ethereum-logo.png} + \includegraphics[width=2cm]{assets/figures/chapter-2/2.6.ethereum-logo.png} \caption{Ethereum logo} \end{figure} Το Ethereum είναι ένα δημόσιο blockchain ανοιχτού κώδικα με εγγενές κρυπτονόμισμα το Ether (ETH). Παρέχει μία προγραμματιστική πλατφόρμα με ενσωματωμένη μία Turing-complete γλώσσα προγραμματισμού, που μπορεί να χρησιμοποιηθεί για τη δημιουργία αποκεντρωμένων εφαρμογών (Decentralized Applications ή DApps) μέσω της χρήσης "έξυπνων συμβολαίων" (smart contracts).\cite{2.6-ethereum-whitepaper} \subsection{Λογαριασμοί} \label{subsection:2-6-1-ethereum-accounts} -Στο Ethereum blockchain οι λογαριασμοί αποτελούν οντότητες οι οποίες μπορούν να δέχονται, να κρατούν και να στέλνουν ETH και tokens, καθώς και να αλληλεπιδρούν με smart contracts.\cite{2.6-ethereum-documentation} Χωρίζονται σε δύο κατηγορίες: στους λογαριασμούς εξωτερικής κατοχής (externally owned accounts ή EOAs) και στους λογαριασμούς συμβολαίων (contract accounts). +Στο Ethereum blockchain οι λογαριασμοί αποτελούν οντότητες οι οποίες μπορούν να δέχονται, να κρατούν και να στέλνουν ETH και tokens, καθώς και να αλληλεπιδρούν με smart contracts.\cite{2.6-ethereum-documentation} Χωρίζονται σε δύο κατηγορίες: στους λογαριασμούς εξωτερικής κατοχής (\textenglish{externally owned accounts} ή EOAs) και στους λογαριασμούς συμβολαίων (contract accounts). Οι λογαριασμοί εξωτερικής κατοχής δημιουργούνται χωρίς κόστος και ελέγχονται μέσω ιδιωτικών κλειδιών. Μπορούν να πραγματοποιούν μόνο συναλλαγές μεταφοράς ETH ή κάποιου token. @@ -44,7 +44,7 @@ ECDSA (βλ. ενότητα \ref{section:2-2-asymmetric-cryptography}). Έτσι Η σύνταξη των smart contracts γίνεται κατά βάση σε γλώσσες υψηλού επιπέδου και, συγκεκριμένα, στις Solidity και Vyper. Πριν την εγγραφή τους στο blockchain, μεταγλωττίζονται σε εμηνεύσιμο από την EVM bytecode, η οποία είναι υπεύθυνη για την αποθήκευση και την εκτέλεσή του (βλ. υποενότητα \ref{subsection:2-6-5-evm}). \subsection{DApps} -Οι DApps στο οικοσύστημα του Ethereum είναι εφαρμογές οι οποίες συνδυάζουν smart contracts και frontend UIs. Είναι ντετερμινιστικές, Turing-complete και εκτελούνται απομονωμένα στην EVM.\cite{2.6-ethereum-documentation} +Οι DApps στο οικοσύστημα του Ethereum είναι εφαρμογές οι οποίες συνδυάζουν \textenglish{smart contracts} και \textenglish{frontend UIs}. Είναι ντετερμινιστικές, Turing-complete και εκτελούνται απομονωμένα στην EVM.\cite{2.6-ethereum-documentation} Πέρα από τα θετικά χαρακτηριστικά των DApps που αναλύθηκαν στην ενότητα \ref{section:1-2-decentralization} (ανοχή σε σφάλματα, αντοχή σε επιθέσεις, απουσία ανάγκης εκχώρησης εμπιστοσύνης, αντίσταση σε συμπαιγνίες), τα Ethereum DApps διαθέτουν επιπλέον όλα τα πλεονεκτήματα των blockchain και των smart contract, όπως μηδενικό downtime, πλήρη ακεραιότητα δεδομένων και επαληθεύσιμη συμπεριφορά. diff --git a/chapters/2.theoretical-background/2.7.ipfs.tex b/chapters/2.theoretical-background/2.7.ipfs.tex index fcf4a02..7408768 100644 --- a/chapters/2.theoretical-background/2.7.ipfs.tex +++ b/chapters/2.theoretical-background/2.7.ipfs.tex @@ -2,7 +2,7 @@ \begin{figure}[H] \centering - \includegraphics[width=2cm]{assets/figures/ipfs-logo.png} + \includegraphics[width=2cm]{assets/figures/chapter-2/2.7.ipfs-logo.png} \caption{IPFS logo} \end{figure} @@ -16,7 +16,7 @@ \item \textbf{Σύνδεση περιεχομένου μέσω κατευθυνόμενων άκυκλων γράφων (Directed Acyclic Graphs ή DAGs)}. Το IPFS αξιοποιεί DAGs (και συγκεκριμένα Merkle DAGs), μίας δομής δεδομένων της οποίας κάθε κόμβος έχει ως μοναδικό αναγνωριστικό το hash του περιεχομένου του (το CID). \begin{enumitemcenteredfigure} - \includegraphics[width=15cm]{assets/figures/merkle-dag.png} + \includegraphics[width=15cm]{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.5.software-requirements.tex b/chapters/3.application-design/3.5.software-requirements.tex index 902c14d..06b96eb 100644 --- a/chapters/3.application-design/3.5.software-requirements.tex +++ b/chapters/3.application-design/3.5.software-requirements.tex @@ -1,6 +1,6 @@ \section{Απαιτήσεις λογισμικού} \label{section:3-5-software-requirements} -Στην παρούσα ενότητα περιγράφονται οι βασικές απαιτήσεις λογισμικού (software requirements) της εφαρμογής. +Στην παρούσα ενότητα περιγράφονται οι βασικές απαιτήσεις λογισμικού ( \textenglish{software requirements}) της εφαρμογής. Η πρώτη κατηγορία είναι αυτή των Λειτουργικών Απαιτήσεων (ΛΑ), η οποία αναφέρεται στη συμπεριφορά του συστήματος, δηλαδή στον τρόπο που θα αντιδρά και στις εξόδους που θα παράγει ανάλογα με τις εισόδους. 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 d2684d6..352574e 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 @@ -3,7 +3,7 @@ % ===== ===== \subsection{Σενάριο χρήσης 9: Διαγραφή τοπικών δεδομένων} \label{subsection:3-6-use-case-delete-local-data} -Το σενάριο χρήσης 9, <ΣΧ-9>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη διαγραφεί των τοπικών δεδομένων. Στους πίνακες \ref{table:3-6-use-case-delete-local-data} και \ref{table:3-6-use-case-delete-local-data-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-9> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-delete-local-data-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. +Το σενάριο χρήσης 9, <ΣΧ-9>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη διαγραφή των τοπικών δεδομένων. Στους πίνακες \ref{table:3-6-use-case-delete-local-data} και \ref{table:3-6-use-case-delete-local-data-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-9> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-6-use-case-delete-local-data-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής. \useCaseTable {Διαγράφω τα τοπικά δεδομένα} diff --git a/chapters/4.application-implementation/4.3.implementation-technology-stack.tex b/chapters/4.application-implementation/4.3.implementation-technology-stack.tex index b2b2633..6081f3e 100644 --- a/chapters/4.application-implementation/4.3.implementation-technology-stack.tex +++ b/chapters/4.application-implementation/4.3.implementation-technology-stack.tex @@ -3,3 +3,5 @@ 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/2.theoretical-background/2.8.orbit-db.tex b/chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex similarity index 89% rename from chapters/2.theoretical-background/2.8.orbit-db.tex rename to chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex index 99c115f..4882055 100644 --- a/chapters/2.theoretical-background/2.8.orbit-db.tex +++ b/chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex @@ -1,12 +1,12 @@ -\section{OrbitDB} \label{section:2-8-orbit-db} +\subsection{OrbitDB} \label{subsection:4-3-1-orbit-db} \begin{figure}[H] \centering - \includegraphics[width=2cm]{assets/figures/orbitdb-logo.png} + \includegraphics[width=2cm]{assets/figures/chapter-4/4.3.orbitdb-logo.png} \caption{OrbitDB logo} \end{figure} -Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{2.8-orbitdb} +Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{4.3-orbitdb} Κάποια Βασικά χαρακτηριστικά της είναι τα εξής: \begin{itemize} @@ -22,7 +22,7 @@ Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση. - \item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου \texttt{CID} είναι το IPFS multihash του μανιφέστου της και \texttt{DATABASE\_NAME} το όνομα της βάσης.\cite{2.8-orbitdb-guide} Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). + \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{Identity}: Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό. Η μορφή του έχει ως εξής\footnote{Βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}}: diff --git a/thesis.pdf b/thesis.pdf index 9537145..cb77598 100644 Binary files a/thesis.pdf and b/thesis.pdf differ