Browse Source

Merge remote-tracking branch 'origin/feature/3-3-software-requirements' into feature/3-4-use-cases

# Conflicts:
#	thesis.pdf
develop
Apostolos Fanakis 3 years ago
parent
commit
5d2d395930
Signed by: Apostolof GPG Key ID: 8600B4C4163B3269
  1. 12
      assets/code/orbit-db-identity.js
  2. BIN
      assets/figures/orbitdb-identity.png
  3. 3
      bibliography/references.bib
  4. 13
      chapters/2.theoretical-background/2.8.orbit-db.tex
  5. 2
      chapters/3.application-design/3.0.application-design.tex
  6. 1
      chapters/3.application-design/3.3.requirements.tex
  7. 102
      chapters/3.application-design/3.3.software-requirements.tex
  8. 13
      custom-commands/custom-enumitem.tex
  9. 10
      custom-commands/custom-listings.tex
  10. 9
      custom-commands/srs-commands.tex
  11. 11
      packages.tex
  12. BIN
      thesis.pdf

12
assets/code/orbit-db-identity.js

@ -0,0 +1,12 @@
{
_id: '<the ID of the external identity>',
// Auto-generated by OrbitDB
_publicKey: '<signing key used to sign OrbitDB entries>',
signatures: {
//Allows the owner of id to prove they own the private key associated with publicKey
id: '<signature of _id signed using publicKey>',
//This links the two ids
publicKey: '<signature of signatures.id + _publicKey using _id>'
},
type: 'orbitdb'
}

BIN
assets/figures/orbitdb-identity.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

3
bibliography/references.bib

@ -24,8 +24,7 @@
@article{2.5-bitcoin,
author = {Nakamoto, Satoshi},
year = {2009},
month = {03},
date = {2008-10-31},
title = {Bitcoin: A Peer-to-Peer Electronic Cash System},
journal = {Cryptography Mailing list at https://metzdowd.com}
}

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

2
chapters/3.application-design/3.0.application-design.tex

@ -2,7 +2,7 @@
\input{chapters/3.application-design/3.1.application-parts}
\input{chapters/3.application-design/3.2.user-categories}
\input{chapters/3.application-design/3.3.requirements}
\input{chapters/3.application-design/3.3.software-requirements}
\input{chapters/3.application-design/3.4.use-cases}
\input{chapters/3.application-design/3.5.technology-stack}
\input{chapters/3.application-design/3.6.implementation-methodology-specification}

1
chapters/3.application-design/3.3.requirements.tex

@ -1 +0,0 @@
\section{Απαιτήσεις λογισμικού} \label{section:3-3-requirements}

102
chapters/3.application-design/3.3.software-requirements.tex

@ -0,0 +1,102 @@
\section{Απαιτήσεις λογισμικού} \label{section:3-3-requirements}
\begin{enumerate}[label=\textbf{<ΛΑ-\arabic*>}, leftmargin=\parindent, align=left, labelwidth=\parindent, labelsep=0pt]
\sysReqItem
{Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή με τον Ethereum λογαριασμό του.}
{Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή, πατώντας το κουμπί "Sign Up" και συμπληρώνοντας τα απαραίτητα πεδία σύμφωνα με τις οδηγίες. Το πεδίο "Username" είναι υποχρεωτικό να συμπληρωθεί και ορίζεται με μοναδικό τρόπο. Σε περίπτωση που ο χρήστης εισάγει μη διαθέσιμο Username, το σύστημα θα πρέπει να μην επιτρέπει στον χρήστη να συνεχίσει και να προβάλει αντίστοιχο μήνυμα λάθους. Τα πεδία "Profile picture URL" και "Location" είναι προαιρετικά.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο χρήστης πρέπει να συνδέεται αυτόματα, εφόσον είναι εγγεγραμμένος.}
{Το σύστημα πρέπει να διαπιστώνει αυτόματα εάν το τρέχον Ethereum address έχει λογαριασμό στην εφαρμογή και εάν ναι, να συνδέει να τον χρήστη, ανακτώντας το Username του από το blockchain και προβάλλοντάς το στο μενού.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Το σύστημα πρέπει να δημιουργεί τις βάσεις δεδομένων του χρήστη.}
{Το σύστημα πρέπει να δημιουργεί τις βάσεις δεδομένων του χρήστη, εάν αυτές δεν υπάρχουν ήδη τοπικά. Όταν ο χρήστης ξεκλειδώσει τον Ethereum λογαριασμό του, το σύστημα θα πρέπει να τον προτρέπει να υπογράψει με το ιδιωτικό του κλειδί μία συναλλαγή που θα εξασφαλίζει τη γνησιότητα των βάσεών του και των δεδομένων που αυτές θα εμπεριέχουν.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο χρήστης πρέπει να μπορεί να δημιουργεί θέματα (topics).}
{Ο χρήστης πρέπει να μπορεί να δημιουργεί νέα θέματα. Αυτό το επιτυγχάνει πατώντας το κουμπί "New Topic", συμπληρώνοντας τα υποχρεωτικά πεδία της φόρμας ("Topic subject" και "First post content"), πατώντας το κουμπί "Create Topic" και επιβεβαιώνοντας τη συναλλαγή στο Ethereum.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να περιηγείται σε θέματα.}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να περιηγείται σε θέματα, πατώντας σε κάποιο θέμα της αρχικής οθόνης και, έπειτα, χρησιμοποιώντας τα βέλη, να περιηγηθεί στο ιστορικό των μηνυμάτων του θέματος.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί μηνύματα (posts).}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί μηνύματα στο θέμα που επιθυμεί. Αυτό επιτυγχάνεται συμπληρώνοντας το πεδίο νέου μηνύματος στην οθόνη του θέματος, πατώντας το κουμπί "Post" και επιβεβαιώνοντας τη συναλλαγή στο Ethereum.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του.}
{Ο χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του. Αυτό το επιτυγχάνει πατώντας το κουμπί επεξεργασίας στο εκάστοτε μήνυμα, τροποποιώντας το μήνυμα και πατώντας το κουμπί επιβεβαίωσης. Στη συνέχεια, το σύστημα τροποποιεί το περιεχόμενο του μηνύματος στη βάση δεδομένων του χρήστη ανάλογα. Σε περίπτωση που ο χρήστης αλλάξει γνώμη κατά τη διάρκεια της διαδικασίας της επεξεργασίας, μπορεί να πατήσει το κουμπί ακύρωσης και να αναιρέσει τις αλλαγές που πραγματοποίησε.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο χρήστης πρέπει να μπορεί να διαγράφει τα μηνύματά του.}
{Ο χρήστης πρέπει να μπορεί να διαγράφει τα μηνύματά του. Αυτό το επιτυγχάνει πατώντας το κουμπί διαγραφής στο εκάστοτε μήνυμα. Στη συνέχεια, το σύστημα αφαιρεί το περιεχόμενο του μηνύματος από τη βάση δεδομένων του χρήστη.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο εγεγγραμμένος χρήστης πρέπει να μπορεί να ψηφίζει σε μηνύματα άλλων χρηστών.}
{Ο εγεγγραμμένος χρήστης πρέπει να μπορεί να υπερψηφίζει ή να καταψηφίζει μηνύματα άλλων χρηστών. Αυτό το επιτυγχάνει πατώντας τα παρακείμενα κουμπιά "+" ή "-" αντίστοιχα και επιβεβαιώνοντας τη συναλλαγή στο Ethereum (οι ψήφοι αποθηκεύονται εκεί). Η διαδικασία ισχύει και για την τροποποίηση ή την αφαίρεση μίας ψήφου από τον χρήστη.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο εγεγγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί ψηφοφορίες (polls).}
{Ο εγεγγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί ψηφοφορίες. Αυτό το επιτυγχάνει πατώντας "Add Poll" στην οθόνη δημιουργία θέματος και συμπληρώνοντας τα απαραίτητα πεδία.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο εγεγγραμμένος χρήστης πρέπει να μπορεί να ψηφίζει σε ψηφοφορίες.}
{Ο εγεγγραμμένος χρήστης πρέπει να μπορεί να ψηφίζει σε ψηφοφορίες, σύμφωνα με τους εκάστοτε κανόνες.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο χρήστης πρέπει να μπορεί να διαγράφει τα τοπικά δεδομένα.}
{Ο χρήστης πρέπει να μπορεί να διαγράφει τα τοπικά δεδομένα. Αυτό το επιτυγχάνει πατώντας στο κουμπί "Clear databases" του μενού και επιβεβαιώνοντας τη διαγραφή μέσω ενός pop-up διαλόγου.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Ο χρήστης πρέπει να μπορεί να δημιουργεί υποκοινότητες.}
{Ο χρήστης πρέπει να μπορεί να δημιουργεί υποκοινότητες, μέσω κουμπιού της αρχικής οθόνης.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Κατά τη δημιουργία υποκοινότητας, ο χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα tokens για αυτήν.}
{Κατά τη δημιουργία υποκοινότητας, ο χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα tokens για αυτήν. Τα tokens αυτά θα διαμοιράζονται με τον τρόπο που επιθυμεί η κοινότητα και θα είναι εκείνα τα οποία θα καθορίζουν τους έγκυρους ψηφοφόρους της.}
{?}{TODO}
{?}{TODO}
\end{enumerate}
\begin{enumerate}[label=\textbf{<ΜΛΑ-\arabic*>}, leftmargin=\parindent, align=left, labelwidth=\parindent, labelsep=0pt]
\sysReqItem
{Τα δεδομένα πρέπει να αποθηκεύονται επί του blockchain μόνο όταν είναι απαραίτητο.}
{}
{?}{TODO}
{?}{TODO}
\sysReqItem
{Τα contracts της εφαρμογής πρέπει να είναι αναβαθμίσιμα.}
{}
{?}{TODO}
{?}{TODO}
\end{enumerate}

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

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

9
custom-commands/srs-commands.tex

@ -0,0 +1,9 @@
\newcommand{\sysReqItem}[6] {
\item \ #1
\begin{itemize}[label={}, leftmargin=0pt]
\item \textbf{Περιγραφή}: #2
\item \textbf{User Priority (#3/5)}: #4
\item \textbf{Technical Priority (#5/5)}: #6
\end{itemize}
\medskip
}

11
packages.tex

@ -20,24 +20,31 @@
\usepackage{custom-packages/greek-enumerate} % Greek enumeration for ordered item lists
\usepackage{float} % For \begin{figure}[H]
\usepackage[font={footnotesize, it}]{caption} % For captions under figures
\usepackage{csquotes} %TODO: unused atm (remove?)
\usepackage [autostyle]{csquotes}
\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
% --- TikZ and UML diagrams
\usepackage{pgf-umlsd}
% --- 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}
\input{custom-commands/srs-commands}
\input{custom-commands/use-case-commands}
% --- Custom styles ---
\renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines
\MakeOuterQuote{"} % For csquotes package
% Hyphenations
\input{misc/hyphenations}

BIN
thesis.pdf

Binary file not shown.
Loading…
Cancel
Save