diff --git a/assets/code/orbit-db-identity.js b/assets/code/orbit-db-identity.js new file mode 100644 index 0000000..8306a06 --- /dev/null +++ b/assets/code/orbit-db-identity.js @@ -0,0 +1,12 @@ +{ + _id: '', + // Auto-generated by OrbitDB + _publicKey: '', + signatures: { + //Allows the owner of id to prove they own the private key associated with publicKey + id: '', + //This links the two ids + publicKey: '' + }, + type: 'orbitdb' +} diff --git a/assets/figures/orbitdb-identity.png b/assets/figures/orbitdb-identity.png deleted file mode 100644 index ef6eeb0..0000000 Binary files a/assets/figures/orbitdb-identity.png and /dev/null differ diff --git a/chapters/2.theoretical-background/2.8.orbit-db.tex b/chapters/2.theoretical-background/2.8.orbit-db.tex index c9f2a23..4ff7b78 100644 --- a/chapters/2.theoretical-background/2.8.orbit-db.tex +++ b/chapters/2.theoretical-background/2.8.orbit-db.tex @@ -6,7 +6,7 @@ \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{2.8-orbitdb} Κάποια Βασικά χαρακτηριστικά της είναι τα εξής: \begin{itemize} @@ -22,16 +22,15 @@ Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση. - \item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής: \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου CID είναι το IPFS multihash του μανιφέστου της, ενώ το DATABASE\_NAME είναι το όνομα της βάσης\cite{2.8-orbitdb-guide}. Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). + \item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής: \texttt{\\/orbitdb/CID/DATABASE\_NAME}, όπου CID είναι το IPFS multihash του μανιφέστου της και DATABASE\_NAME το όνομα της βάσης\cite{2.8-orbitdb-guide}. Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). \item \textbf{Identity}: Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό. Η μορφή του έχει ως εξής (βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}): - \begin{figure}[H] - \centering - \includegraphics[width=12cm]{assets/figures/orbitdb-identity.png} + \begin{enumitemcenteredfigure} + \simplelisting[width=15cm]{orbit-db-identity.js} \caption{OrbitDB Identity} - \end{figure} + \end{enumitemcenteredfigure} - \item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτήν μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης. + \item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτή μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης. \end{itemize} diff --git a/custom-commands/custom-enumitem.tex b/custom-commands/custom-enumitem.tex new file mode 100644 index 0000000..d3801c2 --- /dev/null +++ b/custom-commands/custom-enumitem.tex @@ -0,0 +1,13 @@ +% Centered figure inside an item list +\newenvironment{enumitemcenteredfigure} +{ + \begin{minipage}{\linewidth} + \centering + \begin{figure}[H] + \centering + } + { + \end{figure} + \end{minipage} + \medskip +} diff --git a/custom-commands/custom-listings.tex b/custom-commands/custom-listings.tex new file mode 100644 index 0000000..593578a --- /dev/null +++ b/custom-commands/custom-listings.tex @@ -0,0 +1,10 @@ +\newtcbinputlisting{\simplelisting}[2][]{ + listing file={assets/code/#2}, + title={}, + listing only, + boxrule=1pt, + minted language=javascript, + minted style=default, + minted options={breaklines, breaksymbol={}}, + #1 +} \ No newline at end of file diff --git a/packages.tex b/packages.tex index cd2f7d8..9b41daf 100644 --- a/packages.tex +++ b/packages.tex @@ -24,16 +24,22 @@ \usepackage{listings} %TODO: unused atm (remove?) \usepackage{tabularx} % Support for break lines inside table cells \usepackage{booktabs} % Useful table styling commands +\usepackage{minted} % Source code highlighting (make sure to add -shell-escape flag!) +\usepackage{tcolorbox} % Colored boxes +\tcbuselibrary{minted} % Make tcolorbox work with minted % --- Bibliography --- -\usepackage[sorting=none]{biblatex} % Make sure to have biber as default bibliography tool (e.g. in Texstudio's build configuration) +\usepackage[sorting=none]{biblatex} % --- Custom commands --- \input{custom-commands/custom-title-page} \input{custom-commands/custom-lists} +\input{custom-commands/custom-listings} +\input{custom-commands/custom-enumitem} % --- Custom styles --- \renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines % Hyphenations \input{misc/hyphenations} + diff --git a/thesis.pdf b/thesis.pdf index 64165ed..acce0e7 100644 Binary files a/thesis.pdf and b/thesis.pdf differ