Browse Source

Merge branch 'develop' into feature/3-2-technology-stack

develop
Ezerous 3 years ago
parent
commit
6aa2378778
  1. 0
      assets/figures/chapter-2/2.1.hash-functions-1.png
  2. 0
      assets/figures/chapter-2/2.1.hash-functions-2.png
  3. 0
      assets/figures/chapter-2/2.2.asymmetric-end-to-end-communication.png
  4. 0
      assets/figures/chapter-2/2.2.asymmetric-key-generation.png
  5. 0
      assets/figures/chapter-2/2.3.merkle-tree.png
  6. 0
      assets/figures/chapter-2/2.6.ethereum-logo.png
  7. 0
      assets/figures/chapter-2/2.7.ipfs-logo.png
  8. 0
      assets/figures/chapter-2/2.7.merkle-dag.png
  9. 0
      assets/figures/chapter-4/4.3.orbitdb-logo.png
  10. 20
      bibliography/references.bib
  11. 6
      chapters/0.preamble/0.4.toc.tex
  12. 1
      chapters/2.theoretical-background/2.0.theoretical-background.tex
  13. 4
      chapters/2.theoretical-background/2.1.hash-functions.tex
  14. 4
      chapters/2.theoretical-background/2.2.asymmetric-cryptography.tex
  15. 2
      chapters/2.theoretical-background/2.3.merkle-trees.tex
  16. 6
      chapters/2.theoretical-background/2.6.ethereum.tex
  17. 4
      chapters/2.theoretical-background/2.7.ipfs.tex
  18. 2
      chapters/3.application-design/3.5.software-requirements.tex
  19. 2
      chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex
  20. 2
      chapters/4.application-implementation/4.3.implementation-technology-stack.tex
  21. 8
      chapters/4.application-implementation/4.3.implementation-technology-stack/4.3.1.orbit-db.tex
  22. BIN
      thesis.pdf

0
assets/figures/hash-functions-1.png → assets/figures/chapter-2/2.1.hash-functions-1.png

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

0
assets/figures/hash-functions-2.png → assets/figures/chapter-2/2.1.hash-functions-2.png

Before

Width:  |  Height:  |  Size: 410 KiB

After

Width:  |  Height:  |  Size: 410 KiB

0
assets/figures/asymmetric-end-to-end-communication.png → assets/figures/chapter-2/2.2.asymmetric-end-to-end-communication.png

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 250 KiB

0
assets/figures/asymmetric-key-generation.png → assets/figures/chapter-2/2.2.asymmetric-key-generation.png

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 139 KiB

0
assets/figures/merkle-tree.png → assets/figures/chapter-2/2.3.merkle-tree.png

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 193 KiB

0
assets/figures/ethereum-logo.png → assets/figures/chapter-2/2.6.ethereum-logo.png

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

0
assets/figures/ipfs-logo.png → assets/figures/chapter-2/2.7.ipfs-logo.png

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

0
assets/figures/merkle-dag.png → assets/figures/chapter-2/2.7.merkle-dag.png

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

0
assets/figures/orbitdb-logo.png → assets/figures/chapter-4/4.3.orbitdb-logo.png

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

20
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/}
}

6
chapters/0.preamble/0.4.toc.tex

@ -1 +1,5 @@
\tableofcontents\label{toc}
% 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}

1
chapters/2.theoretical-background/2.0.theoretical-background.tex

@ -7,4 +7,3 @@
\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}

4
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}

4
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}

2
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}

6
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, πλήρη ακεραιότητα δεδομένων και επαληθεύσιμη συμπεριφορά.

4
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}

2
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}) της εφαρμογής.
Η πρώτη κατηγορία είναι αυτή των Λειτουργικών Απαιτήσεων (ΛΑ), η οποία αναφέρεται στη συμπεριφορά του συστήματος, δηλαδή στον τρόπο που θα αντιδρά και στις εξόδους που θα παράγει ανάλογα με τις εισόδους.

2
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
{Διαγράφω τα τοπικά δεδομένα}

2
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}

8
chapters/2.theoretical-background/2.8.orbit-db.tex → 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}}:

BIN
thesis.pdf

Binary file not shown.
Loading…
Cancel
Save