diff --git a/bibliography/references.bib b/bibliography/references.bib index 49fda71..fe7520f 100644 --- a/bibliography/references.bib +++ b/bibliography/references.bib @@ -4,22 +4,17 @@ % proposed label naming convention: "chapter.subchapter-descriptive_name" % for example: "2.2.2-why-gpg-is-awesome" -@article{einstein, - author = "Albert Einstein", - title = "{Zur Elektrodynamik bewegter K{\"o}rper}. ({German}) - [{On} the electrodynamics of moving bodies]", - journal = "Annalen der Physik", - volume = "322", - number = "10", - pages = "891--921", - year = "1905", - DOI = "http://dx.doi.org/10.1002/andp.19053221004" +@online{merkle-tree, + author = "Wikipedia", + title = "Merkle tree", + url = "https://en.wikipedia.org/wiki/Merkle_tree" } -@book{latexcompanion, - author = "Michel Goossens and Frank Mittelbach and Alexander Samarin", - title = "The \LaTeX\ Companion", - year = "1993", - publisher = "Addison-Wesley", - address = "Reading, Massachusetts" +@online{merkle-proofs-explained, + author = "Belavadi Prahalad", + title = "Merkle proofs Explained.", + date = "2018-01-07", + url = "https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5" } + + diff --git a/chapters/2.theoretical-background/2.0.theoretical-background.tex b/chapters/2.theoretical-background/2.0.theoretical-background.tex index a7faffd..0b2e43f 100644 --- a/chapters/2.theoretical-background/2.0.theoretical-background.tex +++ b/chapters/2.theoretical-background/2.0.theoretical-background.tex @@ -7,3 +7,4 @@ \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 diff --git a/chapters/2.theoretical-background/2.3.merkle-trees.tex b/chapters/2.theoretical-background/2.3.merkle-trees.tex index 45af892..4b31895 100644 --- a/chapters/2.theoretical-background/2.3.merkle-trees.tex +++ b/chapters/2.theoretical-background/2.3.merkle-trees.tex @@ -1,6 +1,6 @@ \section{Δένδρα Merkle} -Ένα δένδρο Merkle (Merkle tree ή hash tree) είναι μία δενδρική δομή δεδομένων, η οποία απαρτίζεται από φύλλα (leaf nodes), που περιέχουν hashes από blocks δεδομένων, και από άλλους κόμβους (non-leaf nodes), οι οποίοι περιέχουν τα hashes των θυγατρικών τους. Στην κορυφή του δένδρου βρίσκεται το λεγόμενο root hash. %TODO add reference: https://en.wikipedia.org/wiki/Merkle_tree +Ένα δένδρο Merkle (Merkle tree ή hash tree) είναι μία δενδρική δομή δεδομένων, η οποία απαρτίζεται από φύλλα (leaf nodes), που περιέχουν hashes από blocks δεδομένων, και από άλλους κόμβους (non-leaf nodes), οι οποίοι περιέχουν τα hashes των θυγατρικών τους. Στην κορυφή του δένδρου βρίσκεται το λεγόμενο root hash\cite{merkle-tree}. Η πιο συνηθισμένη υλοποίηση είναι το δυαδικό (binary) δένδρο Merkle, το οποίο περιλαμβάνει δύο θυγατρικούς κόμβους (child nodes) κάτω από κάθε γονικό non-leaf κόμβο, και είναι αυτό που αναλύεται στη συνέχεια. @@ -8,9 +8,9 @@ Τα Merkle trees επιτρέπουν την αποδοτική και ασφαλή επαλήθευση των περιεχομένων που ανήκουν σε σετ δεδομένων μεγάλου μεγέθους. Η βασική ιδιότητα είναι ότι για κάθε σετ δεδομένων υπάρχει ακριβώς ένα πιθανό δένδρο, το οποίο δε γίνεται να τροποποιηθεί χωρίς να αλλάξει ταυτόχρονα και το root hash. -Έτσι, μέσω των λεγόμενων Merkle proofs, μπορούμε: %TODO add reference: https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5 +Έτσι, μέσω των λεγόμενων Merkle proofs, μπορούμε: \begin{itemize} \item Να αποφανθούμε εάν κάποια δεδομένα ανήκουν στο δένδρο (με τον αριθμό των hashes που θα πρέπει να υπολογιστούν να είναι ανάλογος του λογαρίθμου του αριθμού των leaf nodes). \item Να αποδείξουμε συνοπτικά την εγκυρότητα ενός τμήματος κάποιου σετ δεδομένων, χωρίς να χρειαστεί να αποθηκεύσουμε ολόκληρο το σύνολο δεδομένων. - \item Να διασφαλίσουμε την εγκυρότητα ενός συγκεκριμένου συνόλου δεδομένων εντός ενός μεγαλύτερου σύνολου, χωρίς να χρειαστεί να αποκαλυφθεί το περιεχόμενο οποιουδήποτε εκ των δύο. + \item Να διασφαλίσουμε την εγκυρότητα ενός συγκεκριμένου συνόλου δεδομένων εντός ενός μεγαλύτερου σύνολου, χωρίς να χρειαστεί να αποκαλυφθεί το περιεχόμενο οποιουδήποτε εκ των δύο\cite{merkle-proofs-explained}. \end{itemize} diff --git a/chapters/2.theoretical-background/2.8.decentralized-apps.tex b/chapters/2.theoretical-background/2.8.decentralized-apps.tex deleted file mode 100644 index ca59465..0000000 --- a/chapters/2.theoretical-background/2.8.decentralized-apps.tex +++ /dev/null @@ -1 +0,0 @@ -\section{Αποκετροποιημένες εφαρμογές} diff --git a/chapters/2.theoretical-background/2.8.orbit-db.tex b/chapters/2.theoretical-background/2.8.orbit-db.tex new file mode 100644 index 0000000..b9c459b --- /dev/null +++ b/chapters/2.theoretical-background/2.8.orbit-db.tex @@ -0,0 +1,39 @@ +\section{OrbitDB} + +Η OrbitDB είναι μία P2P βάση δεδομένων. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι μία τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications. %TODO add [https://orbitdb.org] and logo + +\underline{\textbf{Stores}}\\ +Η OrbitDB παρέχει διάφορους τύπους βάσεων (stores) για διαφορετικά μοντέλα δεδομένων και περιπτώσεις χρήσης: + +\begin{itemize} + \item log: ένα αμετάβλητο (μόνο για προσάρτηση) ημερολόγιο με ανιχνεύσιμο ιστορικό. + \item feed: ένα μεταβλητό αρχείο καταγραφής με ανιχνεύσιμο ιστορικό, του οποίου οι καταχωρήσεις μπορούν να προστεθούν και να αφαιρεθούν. + \item keyvalue: μία βάση δεδομένων κλειδιών-τιμών. + \item docs: μία βάση δεδομένων εγγράφων στην οποία μπορούν να αρχειοθετηθούν έγγραφα JSON με ένα καθορισμένο κλειδί. + \item counter: μία βάση δεδομένων για καταμέτρηση συμβάντων. +\end{itemize} + +Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση. + +\underline{\textbf{Address}}\\ +Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής: \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου CID είναι το IPFS multihash του μανιφέστου της, ενώ το DATABASE\_NAME είναι το όνομα της βάσης %TODO add [https://github.com/orbitdb/orbit-db/blob/main/GUIDE.md] +. Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). + +\underline{\textbf{Identity}}\\ +Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό. %TODO add [https://github.com/orbitdb/orbit-db-identity-provider] +Η μορφή του έχει ως εξής: + +\begin{lstlisting}[breaklines=true] + { + _id: , + _publicKey: , + signatures: { + id: , //Allows the owner of _id to prove they own the private key associated with _publicKey + publicKey: //This links the two ids + }, + type: 'orbitdb' + } +\end{lstlisting} + +\underline{\textbf{Access Control}}\\ +Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτήν μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης. diff --git a/examples-page.tex b/examples-page.tex index c9570dc..e5b1c37 100644 --- a/examples-page.tex +++ b/examples-page.tex @@ -1,7 +1,3 @@ -Some text and the a cite\cite{einstein}. - -And another cite\cite{latexcompanion}. - This is a list: \begin{itemize} \item item 1 diff --git a/packages.tex b/packages.tex index 6dfee71..9046ee9 100644 --- a/packages.tex +++ b/packages.tex @@ -12,8 +12,9 @@ % Paper size and margins \usepackage{geometry} -\usepackage{biblatex} +\usepackage[backend=bibtex, sorting=none]{biblatex} \usepackage{csquotes} +\usepackage{listings} % Typeset source code listings % Custom commands \input{custom-commands/custom-title} diff --git a/thesis-general.sty b/thesis-general.sty index 85c45ea..853fef8 100644 --- a/thesis-general.sty +++ b/thesis-general.sty @@ -8,4 +8,5 @@ \usepackage{authblk} % Support for footnote style author/affiliation \usepackage{enumitem} % For item lists \usepackage{greek-enumerate} % Greek enumeration for ordered item lists -\usepackage{float} % Fpr \begin{figure}[H] +\usepackage{float} % For \begin{figure}[H] +\usepackage[font={footnotesize, it}]{caption} % For captions under figures \ No newline at end of file diff --git a/thesis.pdf b/thesis.pdf index 30e4220..2a79ed8 100644 Binary files a/thesis.pdf and b/thesis.pdf differ