diff --git a/bibliography/references.bib b/bibliography/references.bib index 49fda71..f85f610 100644 --- a/bibliography/references.bib +++ b/bibliography/references.bib @@ -4,22 +4,3 @@ % 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" -} - -@book{latexcompanion, - author = "Michel Goossens and Frank Mittelbach and Alexander Samarin", - title = "The \LaTeX\ Companion", - year = "1993", - publisher = "Addison-Wesley", - address = "Reading, Massachusetts" -} diff --git a/chapters/2.theoretical-background/2.0.theoretical-background.tex b/chapters/2.theoretical-background/2.0.theoretical-background.tex index 70da92f..0b2e43f 100644 --- a/chapters/2.theoretical-background/2.0.theoretical-background.tex +++ b/chapters/2.theoretical-background/2.0.theoretical-background.tex @@ -5,6 +5,6 @@ \input{chapters/2.theoretical-background/2.3.merkle-trees} \input{chapters/2.theoretical-background/2.4.p2p-networks} \input{chapters/2.theoretical-background/2.5.blockchain} -\input{chapters/2.theoretical-background/2.6.smart-contracts} -\input{chapters/2.theoretical-background/2.7.distributed-databases} -\input{chapters/2.theoretical-background/2.8.decentralized-apps} +\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.6.ethereum.tex b/chapters/2.theoretical-background/2.6.ethereum.tex new file mode 100644 index 0000000..abcecb9 --- /dev/null +++ b/chapters/2.theoretical-background/2.6.ethereum.tex @@ -0,0 +1,21 @@ +\section{Ethereum} + +Το Ethereum είναι ένα δημόσιο blockchain ανοιχτού κώδικα με εγγενές κρυπτονόμισμα το Ether (ETH). Παρέχει μία προγραμματιστική πλατφόρμα με ενσωματωμένη μία Turing-complete γλώσσα προγραμματισμού, που μπορεί να χρησιμοποιηθεί για τη δημιουργία αποκεντρωμένων εφαρμογών (Decentralized Applications ή DApps) μέσω της χρήσης "έξυπνων συμβολαίων" (smart contracts). + +%TODO: add [https://ethereum.org/en/whitepaper/] +%TODO: add Ethereum logo image + +Με απλά λόγια, τα smart contracts αποτελούν αυτόνομα κομμάτια κώδικα τα οποία είναι αποθηκευμένα στο blockchain και ενεργοποιούνται μέσω συναλλαγών. Μπορούν να διαβάζουν και να γράφουν δεδομένα επί του blockchain, κληρονομώντας ιδιότητες όπως τη διαφάνεια (transparency), την εγκυρότητα (validability) και την αμεταβλητότητα (immutability). + +Ένα παράδειγμα της καθημερινότητας που μπορεί να παρομοιασθεί λειτουργικά με smart contract είναι ο αυτόματος πωλητής %TODO: add [https://publications.hse.ru/mirror/pubs/share/folder/8uijw5g6qm/direct/199179205.pdf] +. Ένας αυτόματος πωλητής ορίζεται ως ένα αυτόνομο μηχάνημα που διανέμει αγαθά ή παρέχει υπηρεσίες όταν εισάγονται σε αυτόν κέρματα ή κάποια ηλεκτρονική πληρωμή. Οι αυτόματοι πωλητές είναι προγραμματισμένοι να εκτελούν συγκεκριμένους κανόνες που θα μπορούσαν να οριστούν σε ένα συμβόλαιο. + +Με όμοιο τρόπο σε ένα smart contract μπορούν να κωδικοποιηθούν αυθαίρετες συναρτήσεις μετάβασης, επιτρέποντας τη δημιουργία ποικίλων αποκεντρωμένων εφαρμογών. Οι εφαρμογές αυτές μπορούν να χωριστούν σε τρεις κατηγορίες: +\begin{itemize} + \item Οικονομικές εφαρμογές, οι οποίες παρέχοντας στους χρήστες ισχυρότερους τρόπους διαχείρισης και σύναψης συμβάσεων χρησιμοποιώντας τα χρήματά τους. Αυτό περιλαμβάνει υπο-νομίσματα, χρηματοοικονομικά παράγωγα, συμβάσεις αντιστάθμισης κινδύνου, πορτοφόλια αποταμίευσης, διαθήκες, και, τελικά, ακόμη και ορισμένες κατηγορίες συμβάσεων εργασίας πλήρους κλίμακας. + + \item Ημι-οικονομικές εφαρμογές, όπου εμπλέκονται χρήματα, αλλά η λειτουργία τους εμπεριέχει παράλληλα και μία αξιοσημείωτη μη νομισματική πλευρά. Ένα τέτοιο παράδειγμα είναι οι αυτόματες πληρωμές για λύσεις σε υπολογιστικά προβλήματα (βλ. Gitcoin). + + \item Μη οικονομικές εφαρμογές, όπως η αποκεντρωμένη αποθήκευση δεδομένων, συστήματα ταυτότητας (identity) και φήμης (reputation), διαδικτυακές ψηφοφορίες και αποκεντρωμένη διακυβέρνηση. Οι τελευταίες εισάγουν και την έννοια των Αποκεντρωμένων Αυτόνομων Οργανώσεων (Decentralized Autonomous Organizations ή DAOs), οντοτήτων που ενεργούν αυτόνομα, χωρίς την ανάγκη διαμεσολάβησης κάποιας συγκεντρωτικής (centralized) αρχής. +\end{itemize} +%TODO: add [https://ethereum.org/en/whitepaper/] diff --git a/chapters/2.theoretical-background/2.6.smart-contracts.tex b/chapters/2.theoretical-background/2.6.smart-contracts.tex deleted file mode 100644 index 5860b2a..0000000 --- a/chapters/2.theoretical-background/2.6.smart-contracts.tex +++ /dev/null @@ -1,7 +0,0 @@ -\section{Έξυπνα συμβόλαια} - -Smart Contracts - - τι είναι; - - γιατί τα χρειαζόμαστε; ποιο πρόβλημα λύνουν; - - αναφορά στα έξοδα - - πόσα, ποια blockchains υλοποιούν smart contracts; diff --git a/chapters/2.theoretical-background/2.7.distributed-databases.tex b/chapters/2.theoretical-background/2.7.distributed-databases.tex deleted file mode 100644 index a8ee42f..0000000 --- a/chapters/2.theoretical-background/2.7.distributed-databases.tex +++ /dev/null @@ -1,8 +0,0 @@ -\section{Αποκεντρωτική αποθήκευση δεδομένων (βάση δεδομένων)} - -Distributed databases - - τι είναι; - - ποιες είναι οι διαφορές από το blockchain; - - γιατί τις χρειαζόμαστε; ποιο πρόβλημα λύνουν; - - πόσες, ποιες υπάρχουν; παραδείγματα/διαφορές - - τεχνική ανάλυση (προτερήματα, drawbacks) diff --git a/chapters/2.theoretical-background/2.7.ipfs.tex b/chapters/2.theoretical-background/2.7.ipfs.tex new file mode 100644 index 0000000..3a82b24 --- /dev/null +++ b/chapters/2.theoretical-background/2.7.ipfs.tex @@ -0,0 +1,18 @@ +\section{IPFS} + +Το IPFS (InterPlanetary File System) είναι \textit{ένα P2P πρωτόκολλο υπερμέσων, σχεδιασμένο για να διατηρήσει και να αυξήσει τη γνώση της ανθρωπότητας κάνοντας το διαδίκτυο αναβαθμίσιμο, ανθεκτικό και πιο ανοιχτό}. %TODO: add [https://ipfs.io/] +Πρακτικά πρόκειται για ένα κατανεμημένο σύστημα για αποθήκευση και πρόσβαση σε αρχεία, ιστότοπους, εφαρμογές και δεδομένα. Το περιεχόμενο είναι προσβάσιμο μέσω ενός δικτύου ομότιμων κόμβων που βρίσκονται οπουδήποτε στον κόσμο, οι οποίοι ενδέχεται να μεταφέρουν πληροφορία, να την αποθηκεύσουν ή και τα δύο. %TODO: add [https://docs.ipfs.io/] +%TODO: add IPFS logo image + +Ο τρόπος λειτουργίας του IPFS βασίζεται στα εξής: + +\begin{itemize} + \item \textbf{Μοναδική ταυτοποίηση μέσω διευθυνσιοδότησης περιεχομένου (content addressing)}. Το περιεχόμενο δεν προσδιορίζεται από την τοποθεσία του (π.χ. https://...), αλλά από το τι περιλαμβάνει. Κάθε κομμάτι περιεχομένου έχει ένα μοναδικό αναγνωριστικό περιεχομένου (Content ID ή CID), το οποίο είναι το hash του. + \item \textbf{Σύνδεση περιεχομένου μέσω κατευθυνόμενων άκυκλων γράφων (Directed Acyclic Graphs ή DAGs)}. Το IPFS αξιοποιεί DAGs (και συγκεκριμένα Merkle DAGs), μίας δομής δεδομένων της οποίας κάθε κόμβος έχει ως μοναδικό αναγνωριστικό το hash του περιεχομένου του (το CID). + %TODO: add https://proto.school/tutorial-assets/T0008L04-complete-dag.svg + \item \textbf{Ανακάλυψη περιεχομένου μέσω κατανεμημένων πινάκων κατακερματισμού (Distributed hash tables ή DHTs)}. Ο DHT είναι ένα κατανεμημένο σύστημα για την αντιστοίχιση κλειδιών σε τιμές. Στο IPFS αποτελεί το θεμελιώδες συστατικό του συστήματος δρομολόγησης περιεχομένου και λειτουργεί ως διασταύρωση μεταξύ καταλόγου και συστήματος πλοήγησης. Πρακτικά πρόκειται για ένα πίνακα που αποθηκεύει ποιος έχει ποια δεδομένα και, μέσω του οποίου, ο χρήστης βρίσκει τον peer που έχει αποθηκευμένο το επιθυμητό περιεχόμενο. +\end{itemize} + +Ο αποκεντρωτικός χαρακτήρας του IPFS δίνει τη δυνατότητα να παρέχεται το περιεχόμενο από πολλούς κόμβους, οι οποίοι βρίσκονται σε διαφορετικές τοποθεσίες και δεν υπάγονται σε κάποια συγκεκριμένη κεντρική αρχή. Με αυτόν τον τρόπο, τα δεδομένα είναι πιο ανθεκτικά τόσο από άποψη διαθεσιμότητας (αν ένας κόμβος αποσυνδεθεί, θα υπάρχει κάποιος άλλος), όσο και από άποψη αντοχής στη λογοκρισία. Μπορεί, επίσης, να ανακτώνται γρηγορότερα, εφόσον τα διαθέτουν κάποιοι κοντινοί peers, πράγμα ιδιαίτερα πολύτιμο εάν για κοινότητες που είναι καλά δικτυωμένες τοπικά αλλά δεν έχουν καλή σύνδεση με το ευρύτερο διαδίκτυο. + +%TODO: add stuff about lack of fees, pinning etc 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.pdf b/thesis.pdf index 92da341..9476a6c 100644 Binary files a/thesis.pdf and b/thesis.pdf differ