diff --git a/ipfs-cap2pfs/Makefile b/ipfs-cap2pfs/Makefile
index 4a25352..2ff3ff7 100644
--- a/ipfs-cap2pfs/Makefile
+++ b/ipfs-cap2pfs/Makefile
@@ -5,8 +5,8 @@ LONG=ipfs-p2p-file-system
all: $(LONG).pdf
$(LONG).pdf: $(SHORT).tex sig-alternate.cls $(SHORT).bib
- pdflatex $(SHORT).tex
- bibtex $(SHORT)
+ pdflatex -shell-escape $(SHORT).tex
+ biber $(SHORT)
pdflatex $(SHORT).tex
pdflatex $(SHORT).tex
mv $(SHORT).pdf $(LONG).pdf
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.aux b/ipfs-cap2pfs/ipfs-cap2pfs.aux
index 3bcc0d4..e4d70fb 100644
--- a/ipfs-cap2pfs/ipfs-cap2pfs.aux
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.aux
@@ -1,117 +1,109 @@
\relax
-\citation{AFS}
-\citation{Oceanstore}
-\citation{CFS}
-\citation{BitTorrentUsers}
-\citation{wang13}
-\citation{Camlistore}
-\citation{Dat}
-\citation{mashtizadeh13}
-\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{\thepage }}
-\@writefile{toc}{\contentsline {section}{\numberline {2}Background}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Distributed Hash Tables}{\thepage }}
-\citation{maymounkov02}
-\citation{wang13}
-\citation{freedman04}
-\citation{freedman04}
-\citation{baumgart07}
-\citation{cohen03}
-\citation{levin08}
-\citation{mazieres98}
-\citation{mazieres00}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}Kademlia DHT}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Coral DSHT}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.3}S/Kademlia DHT}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Block Exchanges - BitTorrent}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Version Control Systems - Git}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Self-Certified Filesystems - SFS}{\thepage }}
-\citation{baumgart07}
-\citation{WebRTC}
-\citation{LEDBAT}
-\citation{LEDBAT}
-\citation{SCTP}
-\citation{ICE}
-\@writefile{toc}{\contentsline {section}{\numberline {3}IPFS Design}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Identities}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Note on Cryptographic Functions}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Network}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.1}Note on Peer Addressing}{\thepage }}
-\citation{freedman04}
-\citation{wang13}
-\citation{levin08}
-\citation{levin08}
-\citation{levin08}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Routing}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Block Exchange - BitSwap Protocol}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}BitSwap Credit}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}BitSwap Strategy}{\thepage }}
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Probability of Sending as $r$ increases}}{\thepage }}
+\abx@aux@sortscheme{nty}
+\abx@aux@cite{AFS}
+\abx@aux@cite{Oceanstore}
+\abx@aux@cite{CFS}
+\abx@aux@cite{BitTorrentUsers}
+\abx@aux@cite{wang13}
+\abx@aux@cite{Camlistore}
+\abx@aux@cite{Dat}
+\abx@aux@cite{mashtizadeh13}
+\@writefile{toc}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\@writefile{lof}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\@writefile{lot}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2}Background}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Distributed Hash Tables}{\thepage }}
+\newlabel{sec:bg-dhts}{{2.1}{\thepage }}
+\newlabel{sec:bg-dhts@cref}{{[subsection][1][2]2.1}{\thepage }}
+\abx@aux@cite{maymounkov02}
+\abx@aux@cite{freedman04}
+\abx@aux@cite{baumgart07}
+\abx@aux@cite{cohen03}
+\abx@aux@cite{levin08}
+\abx@aux@cite{mazieres98}
+\abx@aux@cite{mazieres00}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}Kademlia DHT}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Coral DSHT}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.3}S/Kademlia DHT}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Block Exchanges - BitTorrent}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Version Control Systems - Git}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Self-Certified File Systems - SFS}{\thepage }}
+\abx@aux@cite{WebRTC}
+\abx@aux@cite{LEDBAT}
+\abx@aux@cite{SCTP}
+\abx@aux@cite{ICE}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3}IPFS Design}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Identities}{\thepage }}
+\newlabel{sec:design-identities}{{3.1}{\thepage }}
+\newlabel{sec:design-identities@cref}{{[subsection][1][3]3.1}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Note on Cryptographic Functions}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Network}{\thepage }}
+\newlabel{sec:design-network}{{3.2}{\thepage }}
+\newlabel{sec:design-network@cref}{{[subsection][2][3]3.2}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Note on Peer Addressing}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Routing}{\thepage }}
+\newlabel{sec:design-routing}{{3.3}{\thepage }}
+\newlabel{sec:design-routing@cref}{{[subsection][3][3]3.3}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Block Exchange - BitSwap Protocol}{\thepage }}
+\newlabel{sec:design-exchange}{{3.4}{\thepage }}
+\newlabel{sec:design-exchange@cref}{{[subsection][4][3]3.4}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}BitSwap Credit}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}BitSwap Strategy}{\thepage }}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Probability of Sending as $r$ increases}}{\thepage }}
\newlabel{fig:psending-graph}{{1}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.3}BitSwap Ledger}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.4}BitSwap Specification}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Peer.open(NodeId, Ledger)}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Peer.send\_want\_list(WantList)}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Peer.send\_block(Block)}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Peer.close(Bool)}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Notes}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Object Merkle DAG}{\thepage }}
-\citation{dean11}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}Paths}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.2}Local Objects}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.3}Object Pinning}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.4}Publishing Objects}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.5}Object-level Cryptography}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Files}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.1}File Object: \texttt {blob}}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.2}File Object: \texttt {list}}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.3}File Object: \texttt {tree}}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.4}File Object: \texttt {commit}}{\thepage }}
-\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Sample Object Graph}}{\thepage }}
+\newlabel{fig:psending-graph@cref}{{[figure][1][]1}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.3}BitSwap Ledger}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.4}BitSwap Specification}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Peer.open(NodeId, Ledger)}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Peer.send\_want\_list(WantList)}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Peer.send\_block(Block)}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Peer.close(Bool)}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Notes}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Object Merkle DAG}{\thepage }}
+\newlabel{sec:design-objects}{{3.5}{\thepage }}
+\newlabel{sec:design-objects@cref}{{[subsection][5][3]3.5}{\thepage }}
+\abx@aux@cite{dean11}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}Paths}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.2}Local Objects}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.3}Object Pinning}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.4}Publishing Objects}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.5}Object-level Cryptography}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Files}{\thepage }}
+\newlabel{sec:design-files}{{3.6}{\thepage }}
+\newlabel{sec:design-files@cref}{{[subsection][6][3]3.6}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.1}File Object: \texttt {blob}}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.2}File Object: \texttt {list}}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.3}File Object: \texttt {tree}}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.4}File Object: \texttt {commit}}{\thepage }}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Sample Object Graph}}{\thepage }}
\newlabel{fig:sample-object-graph}{{2}{\thepage }}
-\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Sample Objects}}{\thepage }}
+\newlabel{fig:sample-object-graph@cref}{{[figure][2][]2}{\thepage }}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Sample Objects}}{\thepage }}
\newlabel{fig:sample-objects}{{3}{\thepage }}
-\citation{RabinFingerprints}
-\citation{LBFS}
-\citation{rsync}
-\citation{Plan9}
-\citation{Fossil}
-\citation{Venti}
-\citation{LBFS}
-\citation{mazieres98}
-\citation{mazieres00}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.5}Version control}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.6}Filesystem Paths}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.7}Splitting Files into Lists and Blob}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.8}Path Lookup Performance}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.7}IPNS: Naming and Mutable State}{\thepage }}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.1}Self-Certified Names}{\thepage }}
-\citation{Proquint}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.2}Human Friendly Names}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Peer Links}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{DNS TXT IPNS Records}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Proquint Pronounceable Identifiers}{\thepage }}
-\@writefile{toc}{\contentsline {paragraph}{Name Shortening Services}{\thepage }}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.8}Using IPFS}{\thepage }}
-\citation{FUSE}
-\bibstyle{abbrv}
-\bibdata{ipfs-cap2pfs}
-\bibcite{baumgart07}{1}
-\bibcite{BitTorrentUsers}{2}
-\bibcite{cohen03}{3}
-\bibcite{dean11}{4}
-\bibcite{freedman04}{5}
-\bibcite{AFS}{6}
-\bibcite{Oceanstore}{7}
-\bibcite{levin08}{8}
-\bibcite{mashtizadeh13}{9}
-\bibcite{maymounkov02}{10}
-\bibcite{mazieres00}{11}
-\bibcite{mazieres98}{12}
-\bibcite{ICE}{13}
-\bibcite{LEDBAT}{14}
-\bibcite{SCTP}{15}
-\bibcite{wang13}{16}
-\@writefile{toc}{\contentsline {section}{\numberline {4}The Future}{\thepage }}
-\@writefile{toc}{\contentsline {section}{\numberline {5}Acknowledgments}{\thepage }}
-\@writefile{toc}{\contentsline {section}{\numberline {6}References TODO}{\thepage }}
-\@writefile{toc}{\contentsline {section}{\numberline {7}References}{\thepage }}
+\newlabel{fig:sample-objects@cref}{{[figure][3][]3}{\thepage }}
+\abx@aux@cite{RabinFingerprints}
+\abx@aux@cite{LBFS}
+\abx@aux@cite{rsync}
+\abx@aux@cite{Plan9}
+\abx@aux@cite{Fossil}
+\abx@aux@cite{Venti}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.5}Version control}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.6}File System Paths}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.7}Splitting Files into Lists and Blob}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.8}Path Lookup Performance}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.7}IPNS: Naming and Mutable State}{\thepage }}
+\newlabel{sec:design-ipns}{{3.7}{\thepage }}
+\newlabel{sec:design-ipns@cref}{{[subsection][7][3]3.7}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.1}Self-Certified Names}{\thepage }}
+\abx@aux@cite{Proquint}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.2}Human Friendly Names}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Peer Links}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{DNS TXT IPNS Records}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Proquint Pronounceable Identifiers}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {paragraph}{Name Shortening Services}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.8}Using IPFS}{\thepage }}
+\abx@aux@cite{FUSE}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4}The Future}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5}Acknowledgments}{\thepage }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6}References TODO}{\thepage }}
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.bbl b/ipfs-cap2pfs/ipfs-cap2pfs.bbl
index 6b449f8..281171d 100644
--- a/ipfs-cap2pfs/ipfs-cap2pfs.bbl
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.bbl
@@ -1,95 +1,557 @@
-\begin{thebibliography}{10}
+% $ biblatex auxiliary file $
+% $ biblatex bbl format version 2.5 $
+% Do not modify the above lines!
+%
+% This is an auxiliary file used by the 'biblatex' package.
+% This file may safely be deleted. It will be recreated by
+% biber as required.
+%
+\begingroup
+\makeatletter
+\@ifundefined{ver@biblatex.sty}
+ {\@latex@error
+ {Missing 'biblatex' package}
+ {The bibliography requires the 'biblatex' package.}
+ \aftergroup\endinput}
+ {}
+\endgroup
-\bibitem{baumgart07}
-I.~Baumgart and S.~Mies.
-\newblock S/kademlia: A practicable approach towards secure key-based routing.
-\newblock In {\em Parallel and Distributed Systems, 2007 International
- Conference on}, volume~2, pages 1--8. IEEE, 2007.
-\bibitem{BitTorrentUsers}
-I.~BitTorrent.
-\newblock Bittorrent and µtorrent software surpass 150 million user milestone,
- Jan. 2012.
+\refsection{0}
+ \sortlist{nty}{nty}
+ \entry{baumgart07}{inproceedings}{}
+ \name{author}{2}{}{%
+ {{hash=de766501b8d945e9a4b9292bc0dd624c}{Baumgart}{B\bibinitperiod}{Ingmar}{I\bibinitperiod}{}{}{}{}}%
+ {{hash=089d1d95c0352742c6337b1b5f828d22}{Mies}{M\bibinitperiod}{Sebastian}{S\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {IEEE}%
+ }
+ \strng{namehash}{383353c18bd261bb39efb51324f13cd8}
+ \strng{fullhash}{383353c18bd261bb39efb51324f13cd8}
+ \field{sortinit}{B}
+ \field{sortinithash}{4ecbea03efd0532989d3836d1a048c32}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Parallel and Distributed Systems, 2007 International Conference on}
+ \field{title}{{S/Kademlia}: A practicable approach towards secure key-based routing}
+ \field{volume}{2}
+ \field{year}{2007}
+ \field{pages}{1\bibrangedash 8}
+ \range{pages}{8}
+ \endentry
+ \entry{BitTorrentUsers}{online}{}
+ \name{author}{1}{}{%
+ {{hash=3e87d237b1ff15dfe95a0b88b5b7f4db}{BitTorrent}{B\bibinitperiod}{Inc.}{I\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{3e87d237b1ff15dfe95a0b88b5b7f4db}
+ \strng{fullhash}{3e87d237b1ff15dfe95a0b88b5b7f4db}
+ \field{sortinit}{B}
+ \field{sortinithash}{4ecbea03efd0532989d3836d1a048c32}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{month}{01}
+ \field{title}{{BitTorrent} and {$\mu$Torrent} Software Surpass 150 Million User Milestone}
+ \field{year}{2012}
+ \verb{url}
+ \verb http://www.bittorrent.com/intl/es/company/about/ces_2012_150m_users
+ \endverb
+ \endentry
+ \entry{Camlistore}{online}{}
+ \field{sortinit}{C}
+ \field{sortinithash}{59f25d509f3381b07695554a9f35ecb2}
+ \field{labeltitlesource}{title}
+ \field{title}{Camlistore}
+ \verb{url}
+ \verb http://camlistore.org/
+ \endverb
+ \endentry
+ \entry{cohen03}{inproceedings}{}
+ \name{author}{1}{}{%
+ {{hash=48e49f55c3b1ebfe9cf1954935b19d8d}{Cohen}{C\bibinitperiod}{Bram}{B\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{48e49f55c3b1ebfe9cf1954935b19d8d}
+ \strng{fullhash}{48e49f55c3b1ebfe9cf1954935b19d8d}
+ \field{sortinit}{C}
+ \field{sortinithash}{59f25d509f3381b07695554a9f35ecb2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Workshop on Economics of Peer-to-Peer systems}
+ \field{title}{Incentives build robustness in {BitTorrent}}
+ \field{volume}{6}
+ \field{year}{2003}
+ \field{pages}{68\bibrangedash 72}
+ \range{pages}{5}
+ \endentry
+ \entry{CFS}{inproceedings}{}
+ \name{author}{5}{}{%
+ {{hash=a86867a939ed2e915233f5e4d031239d}{Dabek}{D\bibinitperiod}{Frank}{F\bibinitperiod}{}{}{}{}}%
+ {{hash=c4e9f8e102c2895559ca5b01cc81e396}{Kaashoek}{K\bibinitperiod}{M.\bibnamedelimi Frans}{M\bibinitperiod\bibinitdelim F\bibinitperiod}{}{}{}{}}%
+ {{hash=ca0d40fd2ed3fc314917b42745659849}{Karger}{K\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ {{hash=e72124f8c830de64524443c1beaf2d5f}{Morris}{M\bibinitperiod}{Robert}{R\bibinitperiod}{}{}{}{}}%
+ {{hash=51d9ef26181e2e8a9dc546b401e0bb26}{Stoica}{S\bibinitperiod}{Ion}{I\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {ACM}%
+ }
+ \strng{namehash}{a34845916feb775a23a5655f430a7034}
+ \strng{fullhash}{a34845916feb775a23a5655f430a7034}
+ \field{sortinit}{D}
+ \field{sortinithash}{78f7c4753a2004675f316a80bdb31742}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Proceedings of the Eighteenth {ACM} Symposium on Operating Systems Principles}
+ \field{title}{Wide-area cooperative storage with {CFS}}
+ \field{year}{2001}
+ \field{pages}{202\bibrangedash 2015}
+ \range{pages}{1814}
+ \endentry
+ \entry{dean11}{misc}{}
+ \name{author}{2}{}{%
+ {{hash=4aecfb0cc2e1e3b7899129fa2a94e2b8}{Dean}{D\bibinitperiod}{Jeffrey}{J\bibinitperiod}{}{}{}{}}%
+ {{hash=193bcec5240237591ad8fb697869f013}{Ghemawat}{G\bibinitperiod}{Sanjay}{S\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{59b423e9fed33260f87a089f738c1beb}
+ \strng{fullhash}{59b423e9fed33260f87a089f738c1beb}
+ \field{sortinit}{D}
+ \field{sortinithash}{78f7c4753a2004675f316a80bdb31742}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{leveldb--A fast and lightweight key/value database library by {Google}}
+ \field{year}{2011}
+ \endentry
+ \entry{freedman04}{inproceedings}{}
+ \name{author}{3}{}{%
+ {{hash=ae60f8c899894c4ba4d90cdf720eaba1}{Freedman}{F\bibinitperiod}{Michael\bibnamedelima J}{M\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}%
+ {{hash=77c6e8ce66f48dda45f356baedf3a101}{Freudenthal}{F\bibinitperiod}{Eric}{E\bibinitperiod}{}{}{}{}}%
+ {{hash=f74609e259322f9c7b6a2c775a7d8e29}{Mazieres}{M\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{374b89106e23b128b3abb6217d560d83}
+ \strng{fullhash}{374b89106e23b128b3abb6217d560d83}
+ \field{sortinit}{F}
+ \field{sortinithash}{c6a7d9913bbd7b20ea954441c0460b78}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{{NSDI}}
+ \field{title}{Democratizing Content Publication with {Coral}}
+ \field{volume}{4}
+ \field{year}{2004}
+ \field{pages}{18\bibrangedash 18}
+ \range{pages}{1}
+ \endentry
+ \entry{AFS}{article}{}
+ \name{author}{7}{}{%
+ {{hash=d36e5a8f8e8c788234f2149a04e78e92}{Howard}{H\bibinitperiod}{John\bibnamedelima H}{J\bibinitperiod\bibinitdelim H\bibinitperiod}{}{}{}{}}%
+ {{hash=2cedfe2f49192907b879dc7478722fc6}{Kazar}{K\bibinitperiod}{Michael\bibnamedelima L}{M\bibinitperiod\bibinitdelim L\bibinitperiod}{}{}{}{}}%
+ {{hash=2afb399a33f9e6cb297b41e5603feb0d}{Menees}{M\bibinitperiod}{Sherri\bibnamedelima G}{S\bibinitperiod\bibinitdelim G\bibinitperiod}{}{}{}{}}%
+ {{hash=d883f5499dc644c617e31201c78673c6}{Nichols}{N\bibinitperiod}{David\bibnamedelima A}{D\bibinitperiod\bibinitdelim A\bibinitperiod}{}{}{}{}}%
+ {{hash=dad1fb554e5e561ff7cc2cab41c4bd71}{Satyanarayanan}{S\bibinitperiod}{Mahadev}{M\bibinitperiod}{}{}{}{}}%
+ {{hash=c6e90a3106dd0716e2e06a97dba8ce22}{Sidebotham}{S\bibinitperiod}{Robert\bibnamedelima N}{R\bibinitperiod\bibinitdelim N\bibinitperiod}{}{}{}{}}%
+ {{hash=3de3be5e54673a068a1a12c4ab4e5c15}{West}{W\bibinitperiod}{Michael\bibnamedelima J}{M\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {ACM}%
+ }
+ \strng{namehash}{2244cb55dd9052d34bb79debacb9f5e8}
+ \strng{fullhash}{2244cb55dd9052d34bb79debacb9f5e8}
+ \field{sortinit}{H}
+ \field{sortinithash}{82012198d5dfa657b8c4a168793268a6}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{journaltitle}{{ACM} Transactions on Computer Systems ({TOCS})}
+ \field{number}{1}
+ \field{title}{Scale and performance in a distributed file system}
+ \field{volume}{6}
+ \field{year}{1988}
+ \field{pages}{51\bibrangedash 81}
+ \range{pages}{31}
+ \endentry
+ \entry{Oceanstore}{article}{}
+ \true{moreauthor}
+ \name{author}{10}{}{%
+ {{hash=eb3352ded591687a6f8e4143987603fe}{Kubiatowicz}{K\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}%
+ {{hash=ca0e0045640f03b0eb8d1779f669001c}{Bindel}{B\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ {{hash=b6f25c2ea695f4385f6acab832194dfc}{Chen}{C\bibinitperiod}{Yan}{Y\bibinitperiod}{}{}{}{}}%
+ {{hash=c4cd509bdb746bfc363d54d2d65fab71}{Czerwinski}{C\bibinitperiod}{Steven}{S\bibinitperiod}{}{}{}{}}%
+ {{hash=1b40ef08a6ff24c0e863d7f84258d9cc}{Eaton}{E\bibinitperiod}{Patrick}{P\bibinitperiod}{}{}{}{}}%
+ {{hash=402004a0518170450cfffbbc5b57c4b6}{Geels}{G\bibinitperiod}{Dennis}{D\bibinitperiod}{}{}{}{}}%
+ {{hash=947f5404783bfc90e41228f77bcbe964}{Gummadi}{G\bibinitperiod}{Ramakrishan}{R\bibinitperiod}{}{}{}{}}%
+ {{hash=a3365c075d8a9dfec2d10628c3ff8ef2}{Rhea}{R\bibinitperiod}{Sean}{S\bibinitperiod}{}{}{}{}}%
+ {{hash=73d15e37e8a155b476a31ceaaf0a569f}{Weatherspoon}{W\bibinitperiod}{Hakim}{H\bibinitperiod}{}{}{}{}}%
+ {{hash=677914c38f79edf457407a0ac011ac56}{Weimer}{W\bibinitperiod}{Westley}{W\bibinitperiod}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {ACM}%
+ }
+ \strng{namehash}{4e94dd93ec5ec40367a3613e33122413}
+ \strng{fullhash}{d106f0cc4a2b8c17e2114c535119290c}
+ \field{sortinit}{K}
+ \field{sortinithash}{a7d5b3aec5a0890aae7baf85a209abfc}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{journaltitle}{{ACM} Sigplan Notices}
+ \field{number}{11}
+ \field{title}{Oceanstore: An architecture for global-scale persistent storage}
+ \field{volume}{35}
+ \field{year}{2000}
+ \field{pages}{190\bibrangedash 201}
+ \range{pages}{12}
+ \endentry
+ \entry{levin08}{inproceedings}{}
+ \name{author}{4}{}{%
+ {{hash=625ef8fca1dbc98886f6386ea6b0be9f}{Levin}{L\bibinitperiod}{Dave}{D\bibinitperiod}{}{}{}{}}%
+ {{hash=f24ae67d7a9d6cf15a92163520154e09}{LaCurts}{L\bibinitperiod}{Katrina}{K\bibinitperiod}{}{}{}{}}%
+ {{hash=9b584ed96597bc86be7c87234027a521}{Spring}{S\bibinitperiod}{Neil}{N\bibinitperiod}{}{}{}{}}%
+ {{hash=fbfbd346c570975eb853de0b0a726041}{Bhattacharjee}{B\bibinitperiod}{Bobby}{B\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {ACM}%
+ }
+ \strng{namehash}{37ebaf35a8d5c1bfd0d17b9743d5132e}
+ \strng{fullhash}{37ebaf35a8d5c1bfd0d17b9743d5132e}
+ \field{sortinit}{L}
+ \field{sortinithash}{872351f18d0f736066eda0bf18bfa4f7}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{{ACM} {SIGCOMM} Computer Communication Review}
+ \field{number}{4}
+ \field{title}{{BitTorrent} is an auction: analyzing and improving {BitTorrent}'s incentives}
+ \field{volume}{38}
+ \field{year}{2008}
+ \field{pages}{243\bibrangedash 254}
+ \range{pages}{12}
+ \endentry
+ \entry{mashtizadeh13}{inproceedings}{}
+ \name{author}{4}{}{%
+ {{hash=497e744a9f375d6d67f4c9c6d5647b67}{Mashtizadeh}{M\bibinitperiod}{Ali\bibnamedelima Jos\'{e}}{A\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}%
+ {{hash=01ee5e97071c7d2f5e0db7dee5c0b65d}{Bittau}{B\bibinitperiod}{Andrea}{A\bibinitperiod}{}{}{}{}}%
+ {{hash=968761b908c4d8fe41c80edd482fadd2}{Huang}{H\bibinitperiod}{Yifeng\bibnamedelima Frank}{Y\bibinitperiod\bibinitdelim F\bibinitperiod}{}{}{}{}}%
+ {{hash=f74609e259322f9c7b6a2c775a7d8e29}{Mazieres}{M\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {ACM}%
+ }
+ \strng{namehash}{828c1a29203c3ef5ee31d1cd0047ac82}
+ \strng{fullhash}{828c1a29203c3ef5ee31d1cd0047ac82}
+ \field{sortinit}{M}
+ \field{sortinithash}{2684bec41e9697b92699b46491061da2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Proceedings of the Twenty-Fourth {ACM} Symposium on Operating Systems Principles}
+ \field{title}{Replication, history, and grafting in the {Ori} file system}
+ \field{year}{2013}
+ \field{pages}{151\bibrangedash 166}
+ \range{pages}{16}
+ \endentry
+ \entry{maymounkov02}{incollection}{}
+ \name{author}{2}{}{%
+ {{hash=221556d7e71e3256de194f3347838327}{Maymounkov}{M\bibinitperiod}{Petar}{P\bibinitperiod}{}{}{}{}}%
+ {{hash=f74609e259322f9c7b6a2c775a7d8e29}{Mazieres}{M\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {Springer}%
+ }
+ \strng{namehash}{8301c8fd70416b42b1edda4450fbb598}
+ \strng{fullhash}{8301c8fd70416b42b1edda4450fbb598}
+ \field{sortinit}{M}
+ \field{sortinithash}{2684bec41e9697b92699b46491061da2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Peer-to-Peer Systems}
+ \field{title}{Kademlia: A peer-to-peer information system based on the xor metric}
+ \field{year}{2002}
+ \field{pages}{53\bibrangedash 65}
+ \range{pages}{13}
+ \endentry
+ \entry{mazieres00}{article}{}
+ \name{author}{2}{}{%
+ {{hash=f74609e259322f9c7b6a2c775a7d8e29}{Mazieres}{M\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ {{hash=bc5efc05b32405c362c66d0d80439218}{Kaashoek}{K\bibinitperiod}{Frans}{F\bibinitperiod}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {Citeseer}%
+ }
+ \strng{namehash}{be7c8a434b5357e71382318729f8eb35}
+ \strng{fullhash}{be7c8a434b5357e71382318729f8eb35}
+ \field{sortinit}{M}
+ \field{sortinithash}{2684bec41e9697b92699b46491061da2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{Self-certifying file system}
+ \field{year}{2000}
+ \endentry
+ \entry{mazieres98}{inproceedings}{}
+ \name{author}{2}{}{%
+ {{hash=f74609e259322f9c7b6a2c775a7d8e29}{Mazieres}{M\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ {{hash=bf47e9a89253c3f1c964e6bb221faeb1}{Kaashoek}{K\bibinitperiod}{M\bibnamedelima Frans}{M\bibinitperiod\bibinitdelim F\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {ACM}%
+ }
+ \strng{namehash}{cd6a0f97408602f4180d65fe24cd188b}
+ \strng{fullhash}{cd6a0f97408602f4180d65fe24cd188b}
+ \field{sortinit}{M}
+ \field{sortinithash}{2684bec41e9697b92699b46491061da2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Proceedings of the 8th {ACM} {SIGOPS} European workshop on Support for composing distributed applications}
+ \field{title}{Escaping the evils of centralized control with self-certifying pathnames}
+ \field{year}{1998}
+ \field{pages}{118\bibrangedash 125}
+ \range{pages}{8}
+ \endentry
+ \entry{LBFS}{inproceedings}{}
+ \name{author}{3}{}{%
+ {{hash=6272407b3a4585f7b6d2c0f34eb5ac1f}{Muthitacharoen}{M\bibinitperiod}{Athicha}{A\bibinitperiod}{}{}{}{}}%
+ {{hash=007aa4f458b854c3e9e7eaeeda29d4c9}{Chen}{C\bibinitperiod}{Benjie}{B\bibinitperiod}{}{}{}{}}%
+ {{hash=f74609e259322f9c7b6a2c775a7d8e29}{Mazieres}{M\bibinitperiod}{David}{D\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {ACM}%
+ }
+ \strng{namehash}{315059ade6996cc222f9604a03c6781e}
+ \strng{fullhash}{315059ade6996cc222f9604a03c6781e}
+ \field{sortinit}{M}
+ \field{sortinithash}{2684bec41e9697b92699b46491061da2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{{ACM} {SIGOPS} Operating Systems Review}
+ \field{number}{5}
+ \field{title}{A low-bandwidth network file system}
+ \field{volume}{35}
+ \field{year}{2001}
+ \field{pages}{174\bibrangedash 187}
+ \range{pages}{14}
+ \endentry
+ \entry{WebRTC}{report}{}
+ \name{author}{4}{}{%
+ {{hash=f3a972f98579c8c7dc759d18c35d01c5}{Narayanan}{N\bibinitperiod}{Anant}{A\bibinitperiod}{}{}{}{}}%
+ {{hash=6ec10d8f26f4d082a049a9e605d73b99}{Jennings}{J\bibinitperiod}{Cullen}{C\bibinitperiod}{}{}{}{}}%
+ {{hash=e3fc3deeb08ccdeddb6a6c6d1fd14bf2}{Bergkvist}{B\bibinitperiod}{Adam}{A\bibinitperiod}{}{}{}{}}%
+ {{hash=5dfb8d044989b31e30f9cf39d91b9ee0}{Burnett}{B\bibinitperiod}{Daniel}{D\bibinitperiod}{}{}{}{}}%
+ }
+ \list{institution}{1}{%
+ {W3C}%
+ }
+ \strng{namehash}{2a0871b7c6e5ddf1f6c2631425f1cf65}
+ \strng{fullhash}{2a0871b7c6e5ddf1f6c2631425f1cf65}
+ \field{sortinit}{N}
+ \field{sortinithash}{925374ca63e7594de7fafdb83e64d41d}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{month}{09}
+ \field{title}{{WebRTC} 1.0: Real-time Communication Between Browsers}
+ \field{type}{{W3C} Working Draft}
+ \field{year}{2013}
+ \verb{url}
+ \verb http://www.w3.org/TR/2013/WD-webrtc-20130910/
+ \endverb
+ \endentry
+ \entry{Dat}{online}{}
+ \name{author}{1}{}{%
+ {{hash=e856ccc06edc669a0ee4e98decb88cc5}{Ogden}{O\bibinitperiod}{Max}{M\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{e856ccc06edc669a0ee4e98decb88cc5}
+ \strng{fullhash}{e856ccc06edc669a0ee4e98decb88cc5}
+ \field{sortinit}{O}
+ \field{sortinithash}{7803d2715d5e795e70382b084ab8d00e}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{Dat: version, fork, and sync data}
+ \verb{url}
+ \verb https://github.com/maxogden/dat
+ \endverb
+ \endentry
+ \entry{Plan9}{inproceedings}{}
+ \true{moreauthor}
+ \name{author}{4}{}{%
+ {{hash=93ef763b27739841ef3b85d235621787}{Pike}{P\bibinitperiod}{Rob}{R\bibinitperiod}{}{}{}{}}%
+ {{hash=44dfdc5c8e5c79b79d40fbd262e7e68c}{Presotto}{P\bibinitperiod}{Dave}{D\bibinitperiod}{}{}{}{}}%
+ {{hash=0738a39ce7d754134211fbb089ce3a15}{Thompson}{T\bibinitperiod}{Ken}{K\bibinitperiod}{}{}{}{}}%
+ {{hash=f88da78392a92ceba5cd5813bc1ec9f5}{Trickey}{T\bibinitperiod}{Howard}{H\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {London, UK}%
+ }
+ \strng{namehash}{0cfd13b017b5c8f284237b9f7438a2a9}
+ \strng{fullhash}{f481ecb9ca9f9980815205634dd4c70c}
+ \field{sortinit}{P}
+ \field{sortinithash}{c0a4896d0e424f9ca4d7f14f2b3428e7}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Proceedings of the summer 1990 {UKUUG} Conference}
+ \field{title}{Plan 9 from bell labs}
+ \field{year}{1990}
+ \field{pages}{1\bibrangedash 9}
+ \range{pages}{9}
+ \endentry
+ \entry{Venti}{inproceedings}{}
+ \name{author}{2}{}{%
+ {{hash=ff79e7464fb0da9976c23473a3019502}{Quinlan}{Q\bibinitperiod}{Sean}{S\bibinitperiod}{}{}{}{}}%
+ {{hash=f1a3c5013adb18dd6f9cedb4b9de94ef}{Dorward}{D\bibinitperiod}{Sean}{S\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{ef7329d2d0453101211a4b047e08500e}
+ \strng{fullhash}{ef7329d2d0453101211a4b047e08500e}
+ \field{sortinit}{Q}
+ \field{sortinithash}{15867262911a166ca2270ec58a0e3fe9}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{FAST}
+ \field{title}{Venti: A New Approach to Archival Storage.}
+ \field{volume}{2}
+ \field{year}{2002}
+ \field{pages}{89\bibrangedash 101}
+ \range{pages}{13}
+ \endentry
+ \entry{Fossil}{misc}{}
+ \name{author}{3}{}{%
+ {{hash=ff79e7464fb0da9976c23473a3019502}{Quinlan}{Q\bibinitperiod}{Sean}{S\bibinitperiod}{}{}{}{}}%
+ {{hash=47fc594399c11489838ccec2fe5ca538}{McKie}{M\bibinitperiod}{Jim}{J\bibinitperiod}{}{}{}{}}%
+ {{hash=d02ba631c0c7595e1f0ca78d980ee917}{Cox}{C\bibinitperiod}{Russ}{R\bibinitperiod}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {Lucent Technologies Bell Labs, Unpublished memorandum (September 2003)}%
+ }
+ \strng{namehash}{250ee8d53647f0a3f04ced2f514cfdac}
+ \strng{fullhash}{250ee8d53647f0a3f04ced2f514cfdac}
+ \field{sortinit}{Q}
+ \field{sortinithash}{15867262911a166ca2270ec58a0e3fe9}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{Fossil, an archival file server}
+ \field{year}{2003}
+ \endentry
+ \entry{RabinFingerprints}{book}{}
+ \true{moreauthor}
+ \name{author}{1}{}{%
+ {{hash=755f719073b9032722550536facb7dcd}{Rabin}{R\bibinitperiod}{Michael\bibnamedelima O.}{M\bibinitperiod\bibinitdelim O\bibinitperiod}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {Center for Research in Computing Techn., Aiken Computation Laboratory, Univ.}%
+ }
+ \strng{namehash}{25dcd5e77aab10b302296a54ee1bd150}
+ \strng{fullhash}{25dcd5e77aab10b302296a54ee1bd150}
+ \field{sortinit}{R}
+ \field{sortinithash}{c7387613477035a752d935acfc3e3ea2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{Fingerprinting by random polynomials}
+ \field{year}{1981}
+ \endentry
+ \entry{ICE}{article}{}
+ \name{author}{2}{}{%
+ {{hash=644f478601b58831ccd1039711f1eb6c}{Rosenberg}{R\bibinitperiod}{Jonathan}{J\bibinitperiod}{}{}{}{}}%
+ {{hash=2386705678087f998d3481281e0a26a8}{Keranen}{K\bibinitperiod}{Ari}{A\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{3cc74c4786ae689d5cdef4529f55a217}
+ \strng{fullhash}{3cc74c4786ae689d5cdef4529f55a217}
+ \field{sortinit}{R}
+ \field{sortinithash}{c7387613477035a752d935acfc3e3ea2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{{Interactive Connectivity Establishment} ({ICE}): A protocol for {Network Address Translator} ({NAT}) traversal for offer/answer protocols}
+ \field{year}{2013}
+ \endentry
+ \entry{LEDBAT}{article}{}
+ \name{author}{4}{}{%
+ {{hash=70c7c3e67ddcfe1da1cc20006b34b6ca}{Shalunov}{S\bibinitperiod}{Stanislav}{S\bibinitperiod}{}{}{}{}}%
+ {{hash=ac54c3524dee2249247a9711c08e2d6c}{Hazel}{H\bibinitperiod}{Greg}{G\bibinitperiod}{}{}{}{}}%
+ {{hash=68857d89a46df851303be12a76ce120a}{Iyengar}{I\bibinitperiod}{Janardhan}{J\bibinitperiod}{}{}{}{}}%
+ {{hash=7764364f62f072167ba8733ddd9270e7}{Kuehlewind}{K\bibinitperiod}{Mirja}{M\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{e55e8e93296cbf486f3d523ad0b0153c}
+ \strng{fullhash}{e55e8e93296cbf486f3d523ad0b0153c}
+ \field{sortinit}{S}
+ \field{sortinithash}{fd1e7c5ab79596b13dbbb67f8d70fb5a}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{journaltitle}{draft-ietf-ledbat-congestion-04. txt}
+ \field{title}{Low extra delay background transport ({LEDBAT})}
+ \field{year}{2010}
+ \endentry
+ \entry{SCTP}{book}{}
+ \name{author}{2}{}{%
+ {{hash=da0dfda527696bb67a708a09cff2d8e1}{Stewart}{S\bibinitperiod}{Randall\bibnamedelima R}{R\bibinitperiod\bibinitdelim R\bibinitperiod}{}{}{}{}}%
+ {{hash=a94ad255b0f4cf07a05a7c6cbc1f00ff}{Xie}{X\bibinitperiod}{Qiaobing}{Q\bibinitperiod}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {Addison-Wesley Longman Publishing Co., Inc.}%
+ }
+ \strng{namehash}{adc5268270e7c9fdeaeaa384be6910c0}
+ \strng{fullhash}{adc5268270e7c9fdeaeaa384be6910c0}
+ \field{sortinit}{S}
+ \field{sortinithash}{fd1e7c5ab79596b13dbbb67f8d70fb5a}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{Stream control transmission protocol ({SCTP}): a reference guide}
+ \field{year}{2001}
+ \endentry
+ \entry{FUSE}{article}{}
+ \true{moreauthor}
+ \name{author}{1}{}{%
+ {{hash=c72de6a5fa2a8fff2c3e56b97b395502}{Szeredi}{S\bibinitperiod}{Miklos}{M\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{b873c1e68a084ec851d5f43b4b44089c}
+ \strng{fullhash}{b873c1e68a084ec851d5f43b4b44089c}
+ \field{sortinit}{S}
+ \field{sortinithash}{fd1e7c5ab79596b13dbbb67f8d70fb5a}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{{FUSE}: Filesystem in userspace}
+ \verb{url}
+ \verb http://fuse.sourceforge.net/
+ \endverb
+ \endentry
+ \entry{rsync}{article}{}
+ \true{moreauthor}
+ \name{author}{2}{}{%
+ {{hash=e03aa2792f85bde1bb795365e3bdc0b7}{Tridgell}{T\bibinitperiod}{Andrew}{A\bibinitperiod}{}{}{}{}}%
+ {{hash=19312cfae8512bb399698679913bf5d3}{Mackerras}{M\bibinitperiod}{Paul}{P\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{8d754fdcce8417ce89a679f9db372983}
+ \strng{fullhash}{f6d8013cabcdc0b555c4423509819584}
+ \field{sortinit}{T}
+ \field{sortinithash}{423d138a005a533b47e6475e39378bf2}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{title}{The rsync algorithm}
+ \field{year}{1996}
+ \endentry
+ \entry{wang13}{inproceedings}{}
+ \name{author}{2}{}{%
+ {{hash=cce05cab2c437e9c128f853684ee3137}{Wang}{W\bibinitperiod}{Liang}{L\bibinitperiod}{}{}{}{}}%
+ {{hash=e7b03599abff1ed1e25eef05c27ee9c1}{Kangasharju}{K\bibinitperiod}{Jussi}{J\bibinitperiod}{}{}{}{}}%
+ }
+ \list{organization}{1}{%
+ {IEEE}%
+ }
+ \strng{namehash}{ef4a79b4ab2f11b2d0e1412f49683cbd}
+ \strng{fullhash}{ef4a79b4ab2f11b2d0e1412f49683cbd}
+ \field{sortinit}{W}
+ \field{sortinithash}{99e3ba1b3f78bb6f073e7fa7ac11636b}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{booktitle}{Peer-to-Peer Computing ({P2P}), 2013 {IEEE} Thirteenth International Conference on}
+ \field{title}{Measuring large-scale distributed systems: case of {BitTorrent Mainline DHT}}
+ \field{year}{2013}
+ \field{pages}{1\bibrangedash 10}
+ \range{pages}{10}
+ \endentry
+ \entry{Proquint}{article}{}
+ \name{author}{1}{}{%
+ {{hash=34a3e014b99e3eeffd2528716c47b4b8}{Wilkerson}{W\bibinitperiod}{Daniel\bibnamedelima Shawcross}{D\bibinitperiod\bibinitdelim S\bibinitperiod}{}{}{}{}}%
+ }
+ \strng{namehash}{34a3e014b99e3eeffd2528716c47b4b8}
+ \strng{fullhash}{34a3e014b99e3eeffd2528716c47b4b8}
+ \field{sortinit}{W}
+ \field{sortinithash}{99e3ba1b3f78bb6f073e7fa7ac11636b}
+ \field{labelnamesource}{author}
+ \field{labeltitlesource}{title}
+ \field{journaltitle}{{arXiv} preprint {arXiv}:0901.4016}
+ \field{title}{A Proposal for Proquints: Identifiers that are Readable, Spellable, and Pronounceable}
+ \field{year}{2009}
+ \endentry
+ \endsortlist
+\endrefsection
+\endinput
-\bibitem{cohen03}
-B.~Cohen.
-\newblock Incentives build robustness in bittorrent.
-\newblock In {\em Workshop on Economics of Peer-to-Peer systems}, volume~6,
- pages 68--72, 2003.
-
-\bibitem{dean11}
-J.~Dean and S.~Ghemawat.
-\newblock leveldb--a fast and lightweight key/value database library by google,
- 2011.
-
-\bibitem{freedman04}
-M.~J. Freedman, E.~Freudenthal, and D.~Mazieres.
-\newblock Democratizing content publication with coral.
-\newblock In {\em NSDI}, volume~4, pages 18--18, 2004.
-
-\bibitem{AFS}
-J.~H. Howard, M.~L. Kazar, S.~G. Menees, D.~A. Nichols, M.~Satyanarayanan,
- R.~N. Sidebotham, and M.~J. West.
-\newblock Scale and performance in a distributed file system.
-\newblock {\em ACM Transactions on Computer Systems (TOCS)}, 6(1):51--81, 1988.
-
-\bibitem{Oceanstore}
-J.~Kubiatowicz, D.~Bindel, Y.~Chen, S.~Czerwinski, P.~Eaton, D.~Geels,
- R.~Gummadi, S.~Rhea, H.~Weatherspoon, W.~Weimer, et~al.
-\newblock Oceanstore: An architecture for global-scale persistent storage.
-\newblock {\em ACM Sigplan Notices}, 35(11):190--201, 2000.
-
-\bibitem{levin08}
-D.~Levin, K.~LaCurts, N.~Spring, and B.~Bhattacharjee.
-\newblock Bittorrent is an auction: analyzing and improving bittorrent's
- incentives.
-\newblock In {\em ACM SIGCOMM Computer Communication Review}, volume~38, pages
- 243--254. ACM, 2008.
-
-\bibitem{mashtizadeh13}
-A.~J. Mashtizadeh, A.~Bittau, Y.~F. Huang, and D.~Mazieres.
-\newblock Replication, history, and grafting in the ori file system.
-\newblock In {\em Proceedings of the Twenty-Fourth ACM Symposium on Operating
- Systems Principles}, pages 151--166. ACM, 2013.
-
-\bibitem{maymounkov02}
-P.~Maymounkov and D.~Mazieres.
-\newblock Kademlia: A peer-to-peer information system based on the xor metric.
-\newblock In {\em Peer-to-Peer Systems}, pages 53--65. Springer, 2002.
-
-\bibitem{mazieres00}
-D.~Mazieres and F.~Kaashoek.
-\newblock Self-certifying file system.
-\newblock 2000.
-
-\bibitem{mazieres98}
-D.~Mazieres and M.~F. Kaashoek.
-\newblock Escaping the evils of centralized control with self-certifying
- pathnames.
-\newblock In {\em Proceedings of the 8th ACM SIGOPS European workshop on
- Support for composing distributed applications}, pages 118--125. ACM, 1998.
-
-\bibitem{ICE}
-J.~Rosenberg and A.~Keranen.
-\newblock Interactive connectivity establishment (ice): A protocol for network
- address translator (nat) traversal for offer/answer protocols.
-\newblock 2013.
-
-\bibitem{LEDBAT}
-S.~Shalunov, G.~Hazel, J.~Iyengar, and M.~Kuehlewind.
-\newblock Low extra delay background transport (ledbat).
-\newblock {\em draft-ietf-ledbat-congestion-04. txt}, 2010.
-
-\bibitem{SCTP}
-R.~R. Stewart and Q.~Xie.
-\newblock {\em Stream control transmission protocol (SCTP): a reference guide}.
-\newblock Addison-Wesley Longman Publishing Co., Inc., 2001.
-
-\bibitem{wang13}
-L.~Wang and J.~Kangasharju.
-\newblock Measuring large-scale distributed systems: case of bittorrent
- mainline dht.
-\newblock In {\em Peer-to-Peer Computing (P2P), 2013 IEEE Thirteenth
- International Conference on}, pages 1--10. IEEE, 2013.
-
-\end{thebibliography}
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.bcf b/ipfs-cap2pfs/ipfs-cap2pfs.bcf
new file mode 100644
index 0000000..88e23ef
--- /dev/null
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.bcf
@@ -0,0 +1,2312 @@
+
+
+
+
+
+ output_encoding
+ ascii
+
+
+ input_encoding
+ ascii
+
+
+ debug
+ 0
+
+
+ mincrossrefs
+ 2
+
+
+ sortcase
+ 1
+
+
+ sortfirstinits
+ 0
+
+
+ sortupper
+ 1
+
+
+
+
+
+
+ alphaothers
+ +
+
+
+ labelalpha
+ 0
+
+
+ labelnamespec
+ shortauthor
+ author
+ shorteditor
+ editor
+ translator
+
+
+ labeltitle
+ 0
+
+
+ labeltitlespec
+ shorttitle
+ title
+
+
+ labeltitleyear
+ 0
+
+
+ labeldate
+ 0
+
+
+ labeldatespec
+ date
+ eventdate
+ origdate
+ urldate
+ nodate
+
+
+ maxalphanames
+ 3
+
+
+ maxbibnames
+ 99
+
+
+ maxcitenames
+ 99
+
+
+ maxitems
+ 3
+
+
+ minalphanames
+ 1
+
+
+ minbibnames
+ 1
+
+
+ mincitenames
+ 1
+
+
+ minitems
+ 1
+
+
+ singletitle
+ 0
+
+
+ sortalphaothers
+ +
+
+
+ sortlocale
+ english
+
+
+ sortscheme
+ nty
+
+
+ uniquelist
+ 0
+
+
+ uniquename
+ 0
+
+
+ useprefix
+ 0
+
+
+ useafterword
+ 1
+
+
+ useannotator
+ 1
+
+
+ useauthor
+ 1
+
+
+ usebookauthor
+ 1
+
+
+ usecommentator
+ 1
+
+
+ useeditor
+ 1
+
+
+ useeditora
+ 1
+
+
+ useeditorb
+ 1
+
+
+ useeditorc
+ 1
+
+
+ useforeword
+ 1
+
+
+ useholder
+ 1
+
+
+ useintroduction
+ 1
+
+
+ usenamea
+ 1
+
+
+ usenameb
+ 1
+
+
+ usenamec
+ 1
+
+
+ usetranslator
+ 0
+
+
+ useshortauthor
+ 1
+
+
+ useshorteditor
+ 1
+
+
+
+
+ alphaothers
+ sortalphaothers
+ controlversion
+ datamodel
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ labelalphatemplate
+ inheritance
+ sortscheme
+ presort
+ labelnamespec
+ labeltitlespec
+ labeldatespec
+ backend
+ debug
+ loadfiles
+ mincrossrefs
+ texencoding
+ bibencoding
+ safeinputenc
+ sorting
+ sortcase
+ sortupper
+ sortlos
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+ terseinits
+ firstinits
+ sortfirstinits
+ abbreviate
+ dateabbrev
+ sortlocale
+ language
+ clearlang
+ babel
+ autolang
+ indexing
+ sortcites
+ hyperref
+ backref
+ backrefsetstyle
+ block
+ pagetracker
+ citecounter
+ citetracker
+ ibidtracker
+ idemtracker
+ opcittracker
+ loccittracker
+ parentracker
+ maxparens
+ date
+ datelabel
+ urldate
+ eventdate
+ origdate
+ alldates
+ datezeros
+ autocite
+ notetype
+ autopunct
+ punctfont
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldate
+ labelyear
+ uniquelist
+ uniquename
+ singletitle
+ defernumbers
+ refsection
+ refsegment
+ citereset
+ bibwarn
+ useprefix
+ defernums
+ backrefstyle
+ arxiv
+ isbn
+ url
+ doi
+ eprint
+ related
+ subentry
+
+
+ alphaothers
+ sortalphaothers
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ labelalphatemplate
+ presort
+ sortexclusion
+ labelnamespec
+ labeltitlespec
+ labeldatespec
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+ indexing
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldate
+ labelyear
+ uniquelist
+ uniquename
+ singletitle
+ useprefix
+ skipbib
+ skiplos
+ skipbiblist
+ skiplab
+ dataonly
+
+
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ presort
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+ indexing
+ uniquelist
+ uniquename
+ useprefix
+ skipbib
+ skiplos
+ skipbiblist
+ skiplab
+ dataonly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Edited Book
+
+
+
+ Electronic Article
+ Journal Article
+ Magazine Article
+ Newspaper Article
+
+
+
+ Patent
+ Report
+ Government Document
+ Legal Rule or Regulation
+
+
+
+ Blog
+ Online Database
+ Online Multimedia
+ Web Page
+
+
+
+ Book Section
+
+
+
+ Book
+ Electronic Book
+ Manuscript
+ Unpublished Work
+
+
+
+ Conference Paper
+ Conference Proceedings
+
+
+
+ Electronic Article
+ Journal Article
+ Magazine Article
+ Newspaper Article
+
+
+
+ Book Section
+
+
+
+ Conference Proceedings
+ periodical
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ shorthand
+ label
+ labelname
+ labelname
+
+
+ year
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mm
+
+ presort
+
+
+ sortkey
+
+
+ sortname
+ author
+ editor
+ translator
+ sorttitle
+ title
+
+
+ sorttitle
+ title
+
+
+ sortyear
+ year
+
+
+ volume
+ 0000
+
+
+
+
+
+ article
+ artwork
+ audio
+ bibnote
+ book
+ bookinbook
+ booklet
+ collection
+ commentary
+ customa
+ customb
+ customc
+ customd
+ custome
+ customf
+ inbook
+ incollection
+ inproceedings
+ inreference
+ image
+ jurisdiction
+ legal
+ legislation
+ letter
+ manual
+ misc
+ movie
+ music
+ mvcollection
+ mvreference
+ mvbook
+ online
+ patent
+ performance
+ periodical
+ proceedings
+ reference
+ report
+ review
+ set
+ software
+ standard
+ suppbook
+ suppcollection
+ thesis
+ unpublished
+ video
+ xdata
+
+
+ month
+ year
+ day
+ endday
+ endmonth
+ eventday
+ eventendday
+ eventendmonth
+ eventmonth
+ eventyear
+ origday
+ origendday
+ origendmonth
+ origmonth
+ origyear
+ urlday
+ urlendday
+ urlendmonth
+ urlmonth
+ urlyear
+ abstract
+ addendum
+ annotation
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ edition
+ eid
+ entrysubtype
+ eprintclass
+ eprinttype
+ eventtitle
+ eventtitleaddon
+ gender
+ howpublished
+ indexsorttitle
+ indextitle
+ isan
+ isbn
+ ismn
+ isrn
+ issn
+ issue
+ issuesubtitle
+ issuetitle
+ iswc
+ journalsubtitle
+ journaltitle
+ label
+ langid
+ langidopts
+ library
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ nameaddon
+ note
+ number
+ origtitle
+ pagetotal
+ part
+ relatedstring
+ relatedtype
+ reprinttitle
+ series
+ shorthandintro
+ subtitle
+ title
+ titleaddon
+ usera
+ userb
+ userc
+ userd
+ usere
+ userf
+ venue
+ version
+ volume
+ volumes
+ shorthand
+ shortjournal
+ shortseries
+ shorttitle
+ urlendyear
+ endyear
+ eventendyear
+ origendyear
+ sorttitle
+ sortshorthand
+ sortyear
+ sortkey
+ presort
+ institution
+ lista
+ listb
+ listc
+ listd
+ liste
+ listf
+ location
+ organization
+ origlocation
+ origpublisher
+ publisher
+ afterword
+ annotator
+ author
+ bookauthor
+ commentator
+ editor
+ editora
+ editorb
+ editorc
+ foreword
+ holder
+ introduction
+ namea
+ nameb
+ namec
+ translator
+ shortauthor
+ shorteditor
+ sortname
+ authortype
+ editoratype
+ editorbtype
+ editorctype
+ editortype
+ bookpagination
+ nameatype
+ namebtype
+ namectype
+ origlanguage
+ pagination
+ pubstate
+ type
+ language
+ crossref
+ xref
+ date
+ eventdate
+ origdate
+ urldate
+ doi
+ eprint
+ file
+ verba
+ verbb
+ verbc
+ url
+ xdata
+ ids
+ entryset
+ related
+ keywords
+ options
+ relatedoptions
+ pages
+ execute
+
+
+ abstract
+ annotation
+ authortype
+ bookpagination
+ crossref
+ entryset
+ entrysubtype
+ execute
+ file
+ gender
+ ids
+ indextitle
+ indexsorttitle
+ isan
+ ismn
+ iswc
+ keywords
+ label
+ langid
+ langidopts
+ library
+ lista
+ listb
+ listc
+ listd
+ liste
+ listf
+ nameaddon
+ options
+ origday
+ origendday
+ origendmonth
+ origendyear
+ origmonth
+ origyear
+ origlocation
+ origpublisher
+ origtitle
+ pagination
+ presort
+ related
+ relatedoptions
+ relatedstring
+ relatedtype
+ shortauthor
+ shorteditor
+ shorthand
+ shorthandintro
+ shortjournal
+ shortseries
+ shorttitle
+ sortkey
+ sortname
+ sortshorthand
+ sorttitle
+ sortyear
+ usera
+ userb
+ userc
+ userd
+ usere
+ userf
+ verba
+ verbb
+ verbc
+ xdata
+ xref
+
+
+ set
+ entryset
+ crossref
+
+
+ article
+ author
+ journaltitle
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ annotator
+ commentator
+ doi
+ editor
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ eprint
+ eprintclass
+ eprinttype
+ issn
+ issue
+ issuetitle
+ issuesubtitle
+ journalsubtitle
+ language
+ note
+ number
+ origlanguage
+ pages
+ pubstate
+ series
+ subtitle
+ titleaddon
+ translator
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ version
+ volume
+
+
+ bibnote
+ note
+
+
+ book
+ author
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ afterword
+ annotator
+ chapter
+ commentator
+ doi
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eprint
+ eprintclass
+ eprinttype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ maintitle
+ maintitleaddon
+ mainsubtitle
+ note
+ number
+ origlanguage
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ translator
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ volume
+ volumes
+
+
+ mvbook
+ author
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ afterword
+ annotator
+ commentator
+ doi
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eprint
+ eprintclass
+ eprinttype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ note
+ number
+ origlanguage
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ translator
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ volume
+ volumes
+
+
+ inbook
+ bookinbook
+ suppbook
+ author
+ title
+ booktitle
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ afterword
+ annotator
+ bookauthor
+ booksubtitle
+ booktitleaddon
+ chapter
+ commentator
+ doi
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eprint
+ eprintclass
+ eprinttype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ part
+ publisher
+ pages
+ pubstate
+ series
+ subtitle
+ titleaddon
+ translator
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ volume
+ volumes
+
+
+ booklet
+ author
+ editor
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ chapter
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ howpublished
+ language
+ location
+ note
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ titleaddon
+ type
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+
+
+ collection
+ reference
+ editor
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ afterword
+ annotator
+ chapter
+ commentator
+ doi
+ edition
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eprint
+ eprintclass
+ eprinttype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ translator
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ volume
+ volumes
+
+
+ mvcollection
+ mvreference
+ author
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ afterword
+ annotator
+ commentator
+ doi
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eprint
+ eprintclass
+ eprinttype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ note
+ number
+ origlanguage
+ publisher
+ pubstate
+ subtitle
+ titleaddon
+ translator
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ volume
+ volumes
+
+
+ incollection
+ suppcollection
+ inreference
+ author
+ editor
+ title
+ booktitle
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ afterword
+ annotator
+ booksubtitle
+ booktitleaddon
+ chapter
+ commentator
+ doi
+ edition
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eprint
+ eprintclass
+ eprinttype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ pages
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ translator
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ volume
+ volumes
+
+
+ manual
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ author
+ chapter
+ doi
+ edition
+ editor
+ eprint
+ eprintclass
+ eprinttype
+ isbn
+ language
+ location
+ note
+ number
+ organization
+ pages
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ type
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ version
+
+
+ misc
+ title
+ day
+ endday
+ endmonth
+ endyear
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ author
+ doi
+ editor
+ eprint
+ eprintclass
+ eprinttype
+ howpublished
+ language
+ location
+ note
+ organization
+ pubstate
+ subtitle
+ titleaddon
+ type
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ version
+
+
+ online
+ title
+ url
+ addendum
+ author
+ editor
+ language
+ month
+ note
+ organization
+ pubstate
+ subtitle
+ titleaddon
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ version
+ year
+
+
+ patent
+ author
+ title
+ number
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ holder
+ location
+ note
+ pubstate
+ subtitle
+ titleaddon
+ type
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ version
+
+
+ periodical
+ editor
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ doi
+ editora
+ editorb
+ editorc
+ editoratype
+ editorbtype
+ editorctype
+ eprint
+ eprintclass
+ eprinttype
+ issn
+ issue
+ issuesubtitle
+ issuetitle
+ language
+ note
+ number
+ pubstate
+ series
+ subtitle
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ volume
+
+
+ mvproceedings
+ editor
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ eventday
+ eventendday
+ eventendmonth
+ eventendyear
+ eventmonth
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ note
+ number
+ organization
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ venue
+ volumes
+
+
+ proceedings
+ editor
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ chapter
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ eventday
+ eventendday
+ eventendmonth
+ eventendyear
+ eventmonth
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ organization
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ venue
+ volume
+ volumes
+
+
+ inproceedings
+ author
+ editor
+ title
+ booktitle
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ booksubtitle
+ booktitleaddon
+ chapter
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ eventday
+ eventendday
+ eventendmonth
+ eventendyear
+ eventmonth
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ organization
+ pages
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ titleaddon
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ venue
+ volume
+ volumes
+
+
+ report
+ author
+ title
+ type
+ institution
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ chapter
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ isrn
+ language
+ location
+ note
+ number
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ titleaddon
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+ version
+
+
+ thesis
+ author
+ title
+ type
+ institution
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ chapter
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ language
+ location
+ note
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ titleaddon
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+
+
+ unpublished
+ author
+ title
+ day
+ endday
+ endmonth
+ endyear
+ month
+ year
+ addendum
+ howpublished
+ language
+ location
+ note
+ pubstate
+ subtitle
+ titleaddon
+ url
+ urlday
+ urlendday
+ urlendmonth
+ urlendyear
+ urlmonth
+ urlyear
+
+
+ article
+ book
+ inbook
+ bookinbook
+ suppbook
+ booklet
+ collection
+ incollection
+ suppcollection
+ manual
+ misc
+ mvbook
+ mvcollection
+ online
+ patent
+ periodical
+ suppperiodical
+ proceedings
+ inproceedings
+ reference
+ inreference
+ report
+ set
+ thesis
+ unpublished
+
+
+ date
+ year
+
+
+
+
+ set
+
+ entryset
+ crossref
+
+
+
+ article
+
+ author
+ journaltitle
+ title
+
+
+
+ book
+ mvbook
+ mvcollection
+ mvreference
+
+ author
+ title
+
+
+
+ inbook
+ bookinbook
+ suppbook
+
+ author
+ title
+ booktitle
+
+
+
+ booklet
+
+
+ author
+ editor
+
+ title
+
+
+
+ collection
+ reference
+
+ editor
+ title
+
+
+
+ incollection
+ suppcollection
+ inreference
+
+ author
+ editor
+ title
+ booktitle
+
+
+
+ manual
+
+ title
+
+
+
+ misc
+
+ title
+
+
+
+ online
+
+ title
+ url
+
+
+
+ patent
+
+ author
+ title
+ number
+
+
+
+ periodical
+
+ editor
+ title
+
+
+
+ proceedings
+ mvproceedings
+
+ editor
+ title
+
+
+
+ inproceedings
+
+ author
+ editor
+ title
+ booktitle
+
+
+
+ report
+
+ author
+ title
+ type
+ institution
+
+
+
+ thesis
+
+ author
+ title
+ type
+ institution
+
+
+
+ unpublished
+
+ author
+ title
+
+
+
+
+ isbn
+
+
+ issn
+
+
+ ismn
+
+
+ date
+ eventdate
+ origdate
+ urldate
+
+
+ gender
+
+
+
+
+
+
+ ipfs-cap2pfs.bib
+
+
+ AFS
+ Oceanstore
+ CFS
+ BitTorrentUsers
+ wang13
+ Camlistore
+ Dat
+ mashtizadeh13
+ maymounkov02
+ wang13
+ freedman04
+ freedman04
+ baumgart07
+ cohen03
+ levin08
+ mazieres98
+ mazieres00
+ baumgart07
+ WebRTC
+ LEDBAT
+ LEDBAT
+ SCTP
+ ICE
+ freedman04
+ wang13
+ levin08
+ levin08
+ levin08
+ dean11
+ RabinFingerprints
+ LBFS
+ rsync
+ Plan9
+ Fossil
+ Venti
+ LBFS
+ mazieres98
+ mazieres00
+ Proquint
+ FUSE
+
+
+
+
+ presort
+
+
+ sortkey
+
+
+ sortname
+ author
+ editor
+ translator
+ sorttitle
+ title
+
+
+ sorttitle
+ title
+
+
+ sortyear
+ year
+
+
+ volume
+ 0000
+
+
+
+
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.bib b/ipfs-cap2pfs/ipfs-cap2pfs.bib
index cbd9720..4b165ce 100644
--- a/ipfs-cap2pfs/ipfs-cap2pfs.bib
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.bib
@@ -1,7 +1,7 @@
@article{AFS,
title={Scale and performance in a distributed file system},
author={Howard, John H and Kazar, Michael L and Menees, Sherri G and Nichols, David A and Satyanarayanan, Mahadev and Sidebotham, Robert N and West, Michael J},
- journal={ACM Transactions on Computer Systems (TOCS)},
+ journal={{ACM} Transactions on Computer Systems ({TOCS})},
volume={6},
number={1},
pages={51--81},
@@ -12,7 +12,7 @@ @article{AFS
@article{Oceanstore,
title={Oceanstore: An architecture for global-scale persistent storage},
author={Kubiatowicz, John and Bindel, David and Chen, Yan and Czerwinski, Steven and Eaton, Patrick and Geels, Dennis and Gummadi, Ramakrishan and Rhea, Sean and Weatherspoon, Hakim and Weimer, Westley and others},
- journal={ACM Sigplan Notices},
+ journal={{ACM} Sigplan Notices},
volume={35},
number={11},
pages={190--201},
@@ -20,18 +20,27 @@ @article{Oceanstore
publisher={ACM}
}
+@inproceedings{CFS,
+ title={Wide-area cooperative storage with {CFS}},
+ author={Dabek, Frank and Kaashoek, M. Frans and Karger, David and Morris, Robert and Stoica, Ion},
+ booktitle={Proceedings of the Eighteenth {ACM} Symposium on Operating Systems Principles},
+ pages={202--2015},
+ year={2001},
+ organization={ACM}
+}
+
@online{BitTorrentUsers,
-author={BitTorrent, Inc.},
-title={BitTorrent and µTorrent Software Surpass 150 Million User Milestone},
-month=jan,
-year=2012,
-url={http://www.bittorrent.com/intl/es/company/about/ces_2012_150m_users},
+ author={BitTorrent, Inc.},
+ title={{BitTorrent} and {$\mu$Torrent} Software Surpass 150 Million User Milestone},
+ month=jan,
+ year=2012,
+ url={http://www.bittorrent.com/intl/es/company/about/ces_2012_150m_users},
}
@inproceedings{mashtizadeh13,
- title={Replication, history, and grafting in the Ori file system},
+ title={Replication, history, and grafting in the {Ori} file system},
author={Mashtizadeh, Ali Jos{\'e} and Bittau, Andrea and Huang, Yifeng Frank and Mazieres, David},
- booktitle={Proceedings of the Twenty-Fourth ACM Symposium on Operating Systems Principles},
+ booktitle={Proceedings of the Twenty-Fourth {ACM} Symposium on Operating Systems Principles},
pages={151--166},
year={2013},
organization={ACM}
@@ -47,31 +56,104 @@ @incollection{maymounkov02
}
@inproceedings{wang13,
- title={Measuring large-scale distributed systems: case of BitTorrent Mainline DHT},
+ title={Measuring large-scale distributed systems: case of {BitTorrent Mainline DHT}},
author={Wang, Liang and Kangasharju, Jussi},
- booktitle={Peer-to-Peer Computing (P2P), 2013 IEEE Thirteenth International Conference on},
+ booktitle={Peer-to-Peer Computing ({P2P}), 2013 {IEEE} Thirteenth International Conference on},
pages={1--10},
year={2013},
organization={IEEE}
}
+@online{Camlistore,
+ title={Camlistore},
+ url={http://camlistore.org/}
+}
+
+@online{Dat,
+ author={Ogden, Max},
+ title={Dat: version, fork, and sync data},
+ url={https://github.com/maxogden/dat}
+}
+
@inproceedings{freedman04,
- title={Democratizing Content Publication with Coral.},
+ title={Democratizing Content Publication with {Coral}},
author={Freedman, Michael J and Freudenthal, Eric and Mazieres, David},
- booktitle={NSDI},
+ booktitle={{NSDI}},
volume={4},
pages={18--18},
year={2004}
}
@misc{dean11,
- title={leveldb--A fast and lightweight key/value database library by Google},
+ title={leveldb--A fast and lightweight key/value database library by {Google}},
author={Dean, Jeffrey and Ghemawat, Sanjay},
year={2011}
}
+@book{RabinFingerprints,
+ title={Fingerprinting by random polynomials},
+ author={Rabin, Michael O. and others},
+ year={1981},
+ publisher={Center for Research in Computing Techn., Aiken Computation Laboratory, Univ.}
+}
+
+@inproceedings{LBFS,
+ title={A low-bandwidth network file system},
+ author={Muthitacharoen, Athicha and Chen, Benjie and Mazieres, David},
+ booktitle={{ACM} {SIGOPS} Operating Systems Review},
+ volume={35},
+ number={5},
+ pages={174--187},
+ year={2001},
+ organization={ACM}
+}
+
+@article{rsync,
+ title={The rsync algorithm},
+ author={Tridgell, Andrew and Mackerras, Paul and others},
+ year={1996}
+}
+
+@inproceedings{Plan9,
+ title={Plan 9 from bell labs},
+ author={Pike, Rob and Presotto, Dave and Thompson, Ken and Trickey, Howard and others},
+ booktitle={Proceedings of the summer 1990 {UKUUG} Conference},
+ pages={1--9},
+ year={1990},
+ organization={London, UK}
+}
+
+@misc{Fossil,
+ title={Fossil, an archival file server},
+ author={Quinlan, Sean and McKie, Jim and Cox, Russ},
+ year={2003},
+ publisher={Lucent Technologies Bell Labs, Unpublished memorandum (September 2003)}
+}
+
+@inproceedings{Venti,
+ title={Venti: A New Approach to Archival Storage.},
+ author={Quinlan, Sean and Dorward, Sean},
+ booktitle={FAST},
+ volume={2},
+ pages={89--101},
+ year={2002}
+}
+
+@article{Proquint,
+ title={A Proposal for Proquints: Identifiers that are Readable, Spellable, and Pronounceable},
+ author={Wilkerson, Daniel Shawcross},
+ journal={{arXiv} preprint {arXiv}:0901.4016},
+ year={2009}
+}
+
+@article{FUSE,
+ title={{FUSE}: Filesystem in userspace},
+ author={Szeredi, Miklos and others},
+ url={http://fuse.sourceforge.net/}
+}
+
@inproceedings{baumgart07,
- title={S/kademlia: A practicable approach towards secure key-based routing},
+ title={{S/Kademlia}: A practicable approach towards secure key-based routing},
author={Baumgart, Ingmar and Mies, Sebastian},
booktitle={Parallel and Distributed Systems, 2007 International Conference on},
volume={2},
@@ -81,7 +163,7 @@ @inproceedings{baumgart07
}
@inproceedings{cohen03,
- title={Incentives build robustness in BitTorrent},
+ title={Incentives build robustness in {BitTorrent}},
author={Cohen, Bram},
booktitle={Workshop on Economics of Peer-to-Peer systems},
volume={6},
@@ -90,9 +172,9 @@ @inproceedings{cohen03
}
@inproceedings{levin08,
- title={Bittorrent is an auction: analyzing and improving bittorrent's incentives},
+ title={{BitTorrent} is an auction: analyzing and improving {BitTorrent}'s incentives},
author={Levin, Dave and LaCurts, Katrina and Spring, Neil and Bhattacharjee, Bobby},
- booktitle={ACM SIGCOMM Computer Communication Review},
+ booktitle={{ACM} {SIGCOMM} Computer Communication Review},
volume={38},
number={4},
pages={243--254},
@@ -110,33 +192,44 @@ @article{mazieres00
@inproceedings{mazieres98,
title={Escaping the evils of centralized control with self-certifying pathnames},
author={Mazieres, David and Kaashoek, M Frans},
- booktitle={Proceedings of the 8th ACM SIGOPS European workshop on Support for composing distributed applications},
+ booktitle={Proceedings of the 8th {ACM} {SIGOPS} European workshop on Support for composing distributed applications},
pages={118--125},
year={1998},
organization={ACM}
}
@article{UTP,
- title={LEDBAT+ BitTorrent},
+ title={{LEDBAT}+ {BitTorrent}},
author={Rossi, Dario}
}
+@techreport{WebRTC,
+ author={Narayanan, Anant and Jennings, Cullen and Bergkvist, Adam and Burnett, Daniel},
+ title={{WebRTC} 1.0: Real-time Communication Between Browsers},
+ month=sep,
+ url={http://www.w3.org/TR/2013/WD-webrtc-20130910/},
+ year={2013},
+ bibsource={http://w2.syronex.com/jmr/w3c-biblio},
+ type={{W3C} Working Draft},
+ institution={W3C},
+}
+
@article{LEDBAT,
- title={Low extra delay background transport (LEDBAT)},
+ title={Low extra delay background transport ({LEDBAT})},
author={Shalunov, Stanislav and Hazel, Greg and Iyengar, Janardhan and Kuehlewind, Mirja},
journal={draft-ietf-ledbat-congestion-04. txt},
year={2010}
}
@book{SCTP,
- title={Stream control transmission protocol (SCTP): a reference guide},
+ title={Stream control transmission protocol ({SCTP}): a reference guide},
author={Stewart, Randall R and Xie, Qiaobing},
year={2001},
publisher={Addison-Wesley Longman Publishing Co., Inc.}
}
@article{ICE,
- title={Interactive connectivity establishment (ice): A protocol for network address translator (nat) traversal for offer/answer protocols},
+ title={{Interactive Connectivity Establishment} ({ICE}): A protocol for {Network Address Translator} ({NAT}) traversal for offer/answer protocols},
author={Rosenberg, Jonathan and Keranen, Ari},
year={2013}
}
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.blg b/ipfs-cap2pfs/ipfs-cap2pfs.blg
index 9f8cdbc..26a4f2e 100644
--- a/ipfs-cap2pfs/ipfs-cap2pfs.blg
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.blg
@@ -1,64 +1,18 @@
-This is BibTeX, Version 0.99d (TeX Live 2014)
-Capacity: max_strings=35307, hash_size=35307, hash_prime=30011
-The top-level auxiliary file: ipfs-cap2pfs.aux
-The style file: abbrv.bst
-Database file #1: ipfs-cap2pfs.bib
-Warning--entry type for "BitTorrentUsers" isn't style-file defined
---line 23 of file ipfs-cap2pfs.bib
-Warning--I didn't find a database entry for "CFS"
-Warning--I didn't find a database entry for "Camlistore"
-Warning--I didn't find a database entry for "Dat"
-Warning--I didn't find a database entry for "WebRTC"
-Warning--I didn't find a database entry for "RabinFingerprints"
-Warning--I didn't find a database entry for "LBFS"
-Warning--I didn't find a database entry for "rsync"
-Warning--I didn't find a database entry for "Plan9"
-Warning--I didn't find a database entry for "Fossil"
-Warning--I didn't find a database entry for "Venti"
-Warning--I didn't find a database entry for "Proquint"
-Warning--I didn't find a database entry for "FUSE"
-Warning--can't use both volume and number fields in levin08
-Warning--empty journal in mazieres00
-Warning--empty journal in ICE
-You've used 16 entries,
- 2118 wiz_defined-function locations,
- 616 strings with 6732 characters,
-and the built_in function-call counts, 6168 in all, are:
-= -- 609
-> -- 301
-< -- 12
-+ -- 118
-- -- 102
-* -- 403
-:= -- 977
-add.period$ -- 52
-call.type$ -- 16
-change.case$ -- 97
-chr.to.int$ -- 0
-cite$ -- 19
-duplicate$ -- 249
-empty$ -- 478
-format.name$ -- 102
-if$ -- 1337
-int.to.chr$ -- 0
-int.to.str$ -- 16
-missing$ -- 15
-newline$ -- 81
-num.names$ -- 32
-pop$ -- 131
-preamble$ -- 1
-purify$ -- 82
-quote$ -- 0
-skip$ -- 196
-stack$ -- 0
-substring$ -- 327
-swap$ -- 84
-text.length$ -- 12
-text.prefix$ -- 0
-top$ -- 0
-type$ -- 62
-warning$ -- 3
-while$ -- 60
-width$ -- 18
-write$ -- 176
-(There were 16 warnings)
+[3] Config.pm:325> INFO - This is Biber 2.1
+[4] Config.pm:328> INFO - Logfile is 'ipfs-cap2pfs.blg'
+[146] biber:276> INFO - === dl nov 30, 2015, 18:10:05
+[147] Biber.pm:334> INFO - Reading 'ipfs-cap2pfs.bcf'
+[490] Utils.pm:146> WARN - Warning: Found biblatex control file version 2.8, expected version 2.7
+[496] Biber.pm:646> INFO - Found 28 citekeys in bib section 0
+[543] Biber.pm:2978> INFO - Processing section 0
+[590] Biber.pm:3116> INFO - Looking for bibtex format file 'ipfs-cap2pfs.bib' for section 0
+[596] bibtex.pm:1010> INFO - Decoding LaTeX character macros into UTF-8
+[603] bibtex.pm:884> INFO - Found BibTeX data source 'ipfs-cap2pfs.bib'
+[2102] UCollate.pm:66> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
+[2103] UCollate.pm:66> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
+[2103] Biber.pm:2855> INFO - Sorting list 'nty' of type 'entry' with scheme 'nty' and locale 'en-US'
+[2104] Biber.pm:2859> INFO - No sort tailoring available for locale 'en-US'
+[2390] bbl.pm:505> INFO - Writing 'ipfs-cap2pfs.bbl' with encoding 'ascii'
+[2403] Utils.pm:146> WARN - The entry 'mashtizadeh13' has characters which cannot be encoded in 'ascii'. Recoding problematic characters into macros.
+[2411] bbl.pm:596> INFO - Output to ipfs-cap2pfs.bbl
+[2412] Biber.pm:107> INFO - WARNINGS: 2
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.log b/ipfs-cap2pfs/ipfs-cap2pfs.log
index fb27601..fd34c73 100644
--- a/ipfs-cap2pfs/ipfs-cap2pfs.log
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.log
@@ -1,40 +1,40 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex 2014.7.13) 24 JUL 2014 04:12
+This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdflatex 2015.11.18) 30 NOV 2015 18:10
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**ipfs-cap2pfs.tex
(./ipfs-cap2pfs.tex
-LaTeX2e <2014/05/01>
-Babel <3.9k> and hyphenation patterns for 21 languages loaded.
+LaTeX2e <2015/10/01> patch level 2
+Babel <3.9m> and hyphenation patterns for 2 languages loaded.
(./sig-alternate.cls
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/graphics/epsfig.sty
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/epsfig.sty
Package: epsfig 1999/02/16 v1.7a (e)psfig emulation (SPQR)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/graphics/graphicx.sty
-Package: graphicx 2014/04/25 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/graphics/keyval.sty
-Package: keyval 2014/05/08 v1.15 key=value parser (DPC)
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks14
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/graphics/graphics.sty
-Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2014/10/28 v1.0p Standard LaTeX Graphics (DPC,SPQR)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/graphics/trig.sty
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/latexconfig/graphics.cfg
+(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg
File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
)
-Package graphics Info: Driver file: pdftex.def on input line 91.
+Package graphics Info: Driver file: pdftex.def on input line 94.
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pdftex-def/pdftex.def
+(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def
File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/infwarerr.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
)
\Gread@gobject=\count79
@@ -45,10 +45,10 @@ Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
\epsfxsize=\dimen104
\epsfysize=\dimen105
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsfonts/amssymb.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
Package: amssymb 2013/01/14 v3.01 AMS font symbols
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsfonts/amsfonts.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
\@emptytoks=\toks15
\symAMSa=\mathgroup4
@@ -56,24 +56,24 @@ Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
))
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsmath/amsmath.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
Package: amsmath 2013/01/14 v2.14 AMS math features
\@mathmargin=\skip41
For additional information on amsmath, use the `?' option.
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsmath/amstext.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
Package: amstext 2000/06/29 v2.01
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsmath/amsgen.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
File: amsgen.sty 1999/11/30 v2.0
\@emptytoks=\toks16
\ex@=\dimen106
))
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsmath/amsbsy.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
Package: amsbsy 1999/11/29 v1.2d
\pmbraise@=\dimen107
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsmath/amsopn.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
Package: amsopn 1999/12/14 v2.01 operator names
)
\inf@bad=\count80
@@ -144,11 +144,11 @@ Questions on the style, SIGS policies, etc. to Adrienne Griscti griscti@acm.org
\titleboxnoteflag=\count100
Document Class: sig-alternate 2012/05/23 - V2.5 - based on acmproc.cls V1.3
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/base/latexsym.sty
+(/usr/share/texlive/texmf-dist/tex/latex/base/latexsym.sty
Package: latexsym 1998/08/17 v2.2e Standard LaTeX package (lasy symbols)
\symlasy=\mathgroup6
LaTeX Font Info: Overwriting symbol font `lasy' in version `bold'
-(Font) U/lasy/m/n --> U/lasy/b/n on input line 47.
+(Font) U/lasy/m/n --> U/lasy/b/n on input line 52.
)
\@acmtitlebox=\box28
\titlenotecount=\count101
@@ -172,54 +172,48 @@ LaTeX Info: Redefining \cite on input line 1211.
\copyrtyr=\toks29
\acmcopyr=\toks30
\boilerplate=\toks31
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/base/fontenc.sty
+(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2005/09/27 v1.99g Standard LaTeX package
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/base/t1enc.def
+(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def
File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file
-LaTeX Font Info: Redeclaring font encoding T1 on input line 43.
+LaTeX Font Info: Redeclaring font encoding T1 on input line 48.
)
-LaTeX Font Info: Try loading font information for T1+aer on input line 100.
+LaTeX Font Info: Try loading font information for T1+aer on input line 105.
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/ae/t1aer.fd
+(/usr/share/texlive/texmf-dist/tex/latex/ae/t1aer.fd
File: t1aer.fd 1997/11/16 Font definitions for T1/aer.
)))
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgfutil-comm
-on.tex
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
\pgfutil@everybye=\toks32
\pgfutil@tempdima=\dimen123
\pgfutil@tempdimb=\dimen124
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgfutil-comm
-on-lists.tex))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgfutil-late
-x.def
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.t
+ex)) (/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
\pgfutil@abb=\box30
- (/usr/local/texlive/2014basic/texmf-dist/tex/latex/ms/everyshi.sty
+(/usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty
Package: everyshi 2001/05/15 v3.00 EveryShipout Package (MS)
))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.
-tex
-Package: pgfrcs 2013/12/20 v3.0.0 (rcs-revision 1.28)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
+Package: pgfrcs 2015/08/07 v3.0.1a (rcs-revision 1.31)
))
-Package: pgf 2013/12/18 v3.0.0 (rcs-revision 1.14)
+Package: pgf 2015/08/07 v3.0.1a (rcs-revision 1.15)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.cod
-e.tex
-Package: pgfsys 2013/11/30 v3.0.0 (rcs-revision 1.47)
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
+Package: pgfsys 2014/07/09 v3.0.1a (rcs-revision 1.48)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code
-.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
\pgfkeys@pathtoks=\toks33
\pgfkeys@temptoks=\toks34
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgfkeysfilte
-red.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.t
+ex
\pgfkeys@tmptoks=\toks35
))
\pgf@x=\dimen125
@@ -239,34 +233,31 @@ red.code.tex
\t@pgf@toka=\toks36
\t@pgf@tokb=\toks37
\t@pgf@tokc=\toks38
-
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
+ (/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
File: pgf.cfg 2008/05/14 (rcs-revision 1.7)
)
Driver file for pgf: pgfsys-pdftex.def
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdf
-tex.def
-File: pgfsys-pdftex.def 2013/07/18 (rcs-revision 1.33)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
+File: pgfsys-pdftex.def 2014/10/11 (rcs-revision 1.35)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-com
-mon-pdf.def
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.de
+f
File: pgfsys-common-pdf.def 2013/10/10 (rcs-revision 1.13)
)))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoft
-path.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.
+tex
File: pgfsyssoftpath.code.tex 2013/09/09 (rcs-revision 1.9)
\pgfsyssoftpath@smallbuffer@items=\count113
\pgfsyssoftpath@bigbuffer@items=\count114
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprot
-ocol.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.
+tex
File: pgfsysprotocol.code.tex 2006/10/16 (rcs-revision 1.4)
-))
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/xcolor/xcolor.sty
+)) (/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/latexconfig/color.cfg
+(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg
File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
)
Package xcolor Info: Driver file: pdftex.def on input line 225.
@@ -280,17 +271,13 @@ Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360.
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.cod
-e.tex
-Package: pgfcore 2010/04/11 v3.0.0 (rcs-revision 1.7)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
+Package: pgfcore 2010/04/11 v3.0.1a (rcs-revision 1.7)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.
-tex
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.
-tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathparser.cod
-e.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
\pgfmath@dimen=\dimen133
\pgfmath@count=\count115
\pgfmath@box=\box31
@@ -298,30 +285,28 @@ e.tex
\pgfmath@stack@operand=\toks40
\pgfmath@stack@operation=\toks41
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-code.tex
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-basic.code.tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-trigonometric.code.tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-random.code.tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-comparison.code.tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-base.code.tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-round.code.tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-misc.code.tex)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.
-integerarithmetics.code.tex)))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code
-.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code
+.tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonomet
+ric.code.tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.cod
+e.tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison
+.code.tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.
+tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code
+.tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.
+tex)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerari
+thmetics.code.tex)))
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
\c@pgfmathroundto@lastzeros=\count116
))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoin
-ts.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.te
+x
File: pgfcorepoints.code.tex 2013/10/07 (rcs-revision 1.27)
\pgf@picminx=\dimen134
\pgf@picmaxx=\dimen135
@@ -338,124 +323,114 @@ File: pgfcorepoints.code.tex 2013/10/07 (rcs-revision 1.27)
\pgf@zx=\dimen146
\pgf@zy=\dimen147
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepath
-construct.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.
+code.tex
File: pgfcorepathconstruct.code.tex 2013/10/07 (rcs-revision 1.29)
\pgf@path@lastx=\dimen148
\pgf@path@lasty=\dimen149
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepath
-usage.code.tex
-File: pgfcorepathusage.code.tex 2013/12/13 (rcs-revision 1.23)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code
+.tex
+File: pgfcorepathusage.code.tex 2014/11/02 (rcs-revision 1.24)
\pgf@shorten@end@additional=\dimen150
\pgf@shorten@start@additional=\dimen151
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescop
-es.code.tex
-File: pgfcorescopes.code.tex 2013/10/09 (rcs-revision 1.44)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.te
+x
+File: pgfcorescopes.code.tex 2015/05/08 (rcs-revision 1.46)
\pgfpic=\box32
\pgf@hbox=\box33
\pgf@layerbox@main=\box34
\pgf@picture@serial@count=\count117
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregrap
-hicstate.code.tex
-File: pgfcoregraphicstate.code.tex 2013/09/19 (rcs-revision 1.11)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.c
+ode.tex
+File: pgfcoregraphicstate.code.tex 2014/11/02 (rcs-revision 1.12)
\pgflinewidth=\dimen152
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretran
-sformations.code.tex
-File: pgfcoretransformations.code.tex 2013/10/10 (rcs-revision 1.17)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformation
+s.code.tex
+File: pgfcoretransformations.code.tex 2015/08/07 (rcs-revision 1.20)
\pgf@pt@x=\dimen153
\pgf@pt@y=\dimen154
\pgf@pt@temp=\dimen155
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequic
-k.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
File: pgfcorequick.code.tex 2008/10/09 (rcs-revision 1.3)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobje
-cts.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.t
+ex
File: pgfcoreobjects.code.tex 2006/10/11 (rcs-revision 1.2)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepath
-processing.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing
+.code.tex
File: pgfcorepathprocessing.code.tex 2013/09/09 (rcs-revision 1.9)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearro
-ws.code.tex
-File: pgfcorearrows.code.tex 2013/11/07 (rcs-revision 1.40)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.te
+x
+File: pgfcorearrows.code.tex 2015/05/14 (rcs-revision 1.43)
\pgfarrowsep=\dimen156
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshad
-e.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
File: pgfcoreshade.code.tex 2013/07/15 (rcs-revision 1.15)
\pgf@max=\dimen157
\pgf@sys@shading@range@num=\count118
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimag
-e.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
File: pgfcoreimage.code.tex 2013/07/15 (rcs-revision 1.18)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexte
-rnal.code.tex
-File: pgfcoreexternal.code.tex 2013/07/15 (rcs-revision 1.20)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.
+tex
+File: pgfcoreexternal.code.tex 2014/07/09 (rcs-revision 1.21)
\pgfexternal@startupbox=\box35
))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelaye
-rs.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.te
+x
File: pgfcorelayers.code.tex 2013/07/18 (rcs-revision 1.7)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretran
-sparency.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.c
+ode.tex
File: pgfcoretransparency.code.tex 2013/09/30 (rcs-revision 1.5)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatt
-erns.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.
+tex
File: pgfcorepatterns.code.tex 2013/11/07 (rcs-revision 1.5)
)))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/modules/pgfmoduleshape
-s.code.tex
-File: pgfmoduleshapes.code.tex 2013/10/31 (rcs-revision 1.34)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
+File: pgfmoduleshapes.code.tex 2014/03/21 (rcs-revision 1.35)
\pgfnodeparttextbox=\box36
+) (/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
+File: pgfmoduleplot.code.tex 2015/08/03 (rcs-revision 1.13)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.
-code.tex
-File: pgfmoduleplot.code.tex 2013/07/31 (rcs-revision 1.12)
-)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-ve
-rsion-0-65.sty
-Package: pgfcomp-version-0-65 2007/07/03 v3.0.0 (rcs-revision 1.7)
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65
+.sty
+Package: pgfcomp-version-0-65 2007/07/03 v3.0.1a (rcs-revision 1.7)
\pgf@nodesepstart=\dimen158
\pgf@nodesepend=\dimen159
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-ve
-rsion-1-18.sty
-Package: pgfcomp-version-1-18 2007/07/23 v3.0.0 (rcs-revision 1.1)
-))
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code
-.tex)) (/usr/local/texlive/2014basic/texmf-dist/tex/latex/pgf/math/pgfmath.sty
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
-)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/utilities/pgffor.code.
-tex
-Package: pgffor 2013/12/13 v3.0.0 (rcs-revision 1.25)
-
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18
+.sty
+Package: pgfcomp-version-1-18 2007/07/23 v3.0.1a (rcs-revision 1.1)
+)) (/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex))
+(/usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
+Package: pgffor 2013/12/13 v3.0.1a (rcs-revision 1.25)
+
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
\pgffor@iter=\dimen160
\pgffor@skip=\dimen161
\pgffor@stack=\toks42
\pgffor@toks=\toks43
))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tik
-z.code.tex
-Package: tikz 2013/12/13 v3.0.0 (rcs-revision 1.142)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
+Package: tikz 2015/08/07 v3.0.1a (rcs-revision 1.151)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/libraries/pgflibrarypl
-othandlers.code.tex
-File: pgflibraryplothandlers.code.tex 2013/08/31 v3.0.0 (rcs-revision 1.20)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers
+.code.tex
+File: pgflibraryplothandlers.code.tex 2013/08/31 v3.0.1a (rcs-revision 1.20)
\pgf@plot@mark@count=\count119
\pgfplotmarksize=\dimen162
)
@@ -474,8 +449,7 @@ File: pgflibraryplothandlers.code.tex 2013/08/31 v3.0.0 (rcs-revision 1.20)
\tikznumberofcurrentchild=\count122
\tikz@fig@count=\count123
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/modules/pgfmodulematri
-x.code.tex
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
File: pgfmodulematrix.code.tex 2013/09/17 (rcs-revision 1.8)
\pgfmatrixcurrentrow=\count124
\pgfmatrixcurrentcolumn=\count125
@@ -483,54 +457,56 @@ File: pgfmodulematrix.code.tex 2013/09/17 (rcs-revision 1.8)
)
\tikz@expandcount=\count127
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/frontendlayer/tikz/lib
-raries/tikzlibrarytopaths.code.tex
-File: tikzlibrarytopaths.code.tex 2008/06/17 v3.0.0 (rcs-revision 1.2)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
+zlibrarytopaths.code.tex
+File: tikzlibrarytopaths.code.tex 2008/06/17 v3.0.1a (rcs-revision 1.2)
)))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/frontendlayer/tikz/lib
-raries/tikzlibraryarrows.code.tex
-File: tikzlibraryarrows.code.tex 2008/01/09 v3.0.0 (rcs-revision 1.1)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
+zlibraryarrows.code.tex
+File: tikzlibraryarrows.code.tex 2008/01/09 v3.0.1a (rcs-revision 1.1)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/libraries/pgflibraryar
-rows.code.tex
-File: pgflibraryarrows.code.tex 2013/09/23 v3.0.0 (rcs-revision 1.16)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.code.
+tex
+File: pgflibraryarrows.code.tex 2013/09/23 v3.0.1a (rcs-revision 1.16)
\arrowsize=\dimen169
))
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/frontendlayer/tikz/lib
-raries/tikzlibrarytrees.code.tex
-File: tikzlibrarytrees.code.tex 2008/02/24 v3.0.0 (rcs-revision 1.2)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
+zlibrarytrees.code.tex
+File: tikzlibrarytrees.code.tex 2008/02/24 v3.0.1a (rcs-revision 1.2)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/pgf/frontendlayer/tikz/lib
-raries/tikzlibrarypositioning.code.tex
-File: tikzlibrarypositioning.code.tex 2008/10/06 v3.0.0 (rcs-revision 1.7)
+(/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tik
+zlibrarypositioning.code.tex
+File: tikzlibrarypositioning.code.tex 2008/10/06 v3.0.1a (rcs-revision 1.7)
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/tools/array.sty
-Package: array 2008/09/09 v2.4c Tabular extension package (FMi)
+(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
+Package: array 2014/10/28 v2.4c Tabular extension package (FMi)
\col@sep=\dimen170
\extrarowheight=\dimen171
\NC@list=\toks44
\extratabsurround=\skip44
\backup@length=\skip45
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/mh/mathtools.sty
-Package: mathtools 2014/05/21 v1.14 mathematical typesetting tools
+(/usr/share/texlive/texmf-dist/tex/latex/mathtools/mathtools.sty
+Package: mathtools 2015/11/12 v1.18 mathematical typesetting tools
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/tools/calc.sty
-Package: calc 2007/08/22 v4.3 Infix arithmetic (KKT,FJ)
+(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty
+Package: calc 2014/10/28 v4.3 Infix arithmetic (KKT,FJ)
\calc@Acount=\count128
\calc@Bcount=\count129
\calc@Adimen=\dimen172
\calc@Bdimen=\dimen173
\calc@Askip=\skip46
\calc@Bskip=\skip47
-LaTeX Info: Redefining \setlength on input line 75.
-LaTeX Info: Redefining \addtolength on input line 76.
+LaTeX Info: Redefining \setlength on input line 80.
+LaTeX Info: Redefining \addtolength on input line 81.
\calc@Ccount=\count130
\calc@Cskip=\skip48
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/mh/mhsetup.sty
+(/usr/share/texlive/texmf-dist/tex/latex/mathtools/mhsetup.sty
Package: mhsetup 2010/01/21 v1.2a programming setup (MH)
)
+LaTeX Info: Thecontrolsequence`\('isalreadyrobust on input line 129.
+LaTeX Info: Thecontrolsequence`\)'isalreadyrobust on input line 129.
LaTeX Info: Thecontrolsequence`\['isalreadyrobust on input line 129.
LaTeX Info: Thecontrolsequence`\]'isalreadyrobust on input line 129.
\g_MT_multlinerow_int=\count131
@@ -543,44 +519,294 @@ LaTeX Info: Thecontrolsequence`\]'isalreadyrobust on input line 129.
\l_MT_above_shortintertext_sep=\dimen179
\l_MT_below_shortintertext_sep=\dimen180
)
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/biblatex.sty
+Package: biblatex 2015/10/21 v3.1 programmable bibliographies (PK/JW/AB)
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/biblatex2.sty
+Package: biblatex2 2015/10/21 v3.1 programmable bibliographies (biber) (PK/JW/A
+B)
+
+(/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty
+Package: etoolbox 2015/08/02 v2.2a e-TeX tools for LaTeX (JAW)
+\etb@tempcnta=\count132
+)
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
+
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
+Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
+
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
+Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
+
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
+Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds) That can mean that you are not using pdfTeX 1.50 or
+(etexcmds) that some package has redefined \expanded.
+(etexcmds) In the latter case, load this package earlier.
+)))
+(/usr/share/texlive/texmf-dist/tex/latex/logreq/logreq.sty
+Package: logreq 2010/08/04 v1.0 xml request logger
+\lrq@indent=\count133
+
+(/usr/share/texlive/texmf-dist/tex/latex/logreq/logreq.def
+File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
+))
+(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty
+Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
+)
+(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip11
+Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
+)
+\c@tabx@nest=\count134
+\c@listtotal=\count135
+\c@listcount=\count136
+\c@liststart=\count137
+\c@liststop=\count138
+\c@citecount=\count139
+\c@citetotal=\count140
+\c@multicitecount=\count141
+\c@multicitetotal=\count142
+\c@instcount=\count143
+\c@maxnames=\count144
+\c@minnames=\count145
+\c@maxitems=\count146
+\c@minitems=\count147
+\c@citecounter=\count148
+\c@savedcitecounter=\count149
+\c@uniquelist=\count150
+\c@uniquename=\count151
+\c@refsection=\count152
+\c@refsegment=\count153
+\c@maxextratitle=\count154
+\c@maxextratitleyear=\count155
+\c@maxextrayear=\count156
+\c@maxextraalpha=\count157
+\c@abbrvpenalty=\count158
+\c@highnamepenalty=\count159
+\c@lownamepenalty=\count160
+\c@maxparens=\count161
+\c@parenlevel=\count162
+\blx@tempcnta=\count163
+\blx@tempcntb=\count164
+\blx@tempcntc=\count165
+\blx@maxsection=\count166
+\blx@maxsegment@0=\count167
+\blx@notetype=\count168
+\blx@parenlevel@text=\count169
+\blx@parenlevel@foot=\count170
+\blx@sectionciteorder@0=\count171
+\labelnumberwidth=\skip50
+\labelalphawidth=\skip51
+\biblabelsep=\skip52
+\bibitemsep=\skip53
+\bibnamesep=\skip54
+\bibinitsep=\skip55
+\bibparsep=\skip56
+\bibhang=\skip57
+\blx@bcfin=\read2
+\blx@bcfout=\write4
+\c@mincomprange=\count172
+\c@maxcomprange=\count173
+\c@mincompwidth=\count174
+Package biblatex Info: Trying to load biblatex default data model...
+Package biblatex Info: ... file 'blx-dm.def' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/blx-dm.def)
+Package biblatex Info: Trying to load biblatex style data model...
+Package biblatex Info: ... file 'trad-abbrv.dbx' not found.
+Package biblatex Info: Trying to load biblatex custom data model...
+Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
+\c@afterword=\count175
+\c@savedafterword=\count176
+\c@annotator=\count177
+\c@savedannotator=\count178
+\c@author=\count179
+\c@savedauthor=\count180
+\c@bookauthor=\count181
+\c@savedbookauthor=\count182
+\c@commentator=\count183
+\c@savedcommentator=\count184
+\c@editor=\count185
+\c@savededitor=\count186
+\c@editora=\count187
+\c@savededitora=\count188
+\c@editorb=\count189
+\c@savededitorb=\count190
+\c@editorc=\count191
+\c@savededitorc=\count192
+\c@foreword=\count193
+\c@savedforeword=\count194
+\c@holder=\count195
+\c@savedholder=\count196
+\c@introduction=\count197
+\c@savedintroduction=\count198
+\c@namea=\count199
+\c@savednamea=\count266
+\c@nameb=\count267
+\c@savednameb=\count268
+\c@namec=\count269
+\c@savednamec=\count270
+\c@translator=\count271
+\c@savedtranslator=\count272
+\c@shortauthor=\count273
+\c@savedshortauthor=\count274
+\c@shorteditor=\count275
+\c@savedshorteditor=\count276
+\c@labelname=\count277
+\c@savedlabelname=\count278
+\c@institution=\count279
+\c@savedinstitution=\count280
+\c@lista=\count281
+\c@savedlista=\count282
+\c@listb=\count283
+\c@savedlistb=\count284
+\c@listc=\count285
+\c@savedlistc=\count286
+\c@listd=\count287
+\c@savedlistd=\count288
+\c@liste=\count289
+\c@savedliste=\count290
+\c@listf=\count291
+\c@savedlistf=\count292
+\c@location=\count293
+\c@savedlocation=\count294
+\c@organization=\count295
+\c@savedorganization=\count296
+\c@origlocation=\count297
+\c@savedoriglocation=\count298
+\c@origpublisher=\count299
+\c@savedorigpublisher=\count300
+\c@publisher=\count301
+\c@savedpublisher=\count302
+\c@language=\count303
+\c@savedlanguage=\count304
+\c@pageref=\count305
+\c@savedpageref=\count306
+\shorthandwidth=\skip58
+\shortjournalwidth=\skip59
+\shortserieswidth=\skip60
+\shorttitlewidth=\skip61
+\shortauthorwidth=\skip62
+\shorteditorwidth=\skip63
+Package biblatex Info: Trying to load compatibility code...
+Package biblatex Info: ... file 'blx-compat.def' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/blx-compat.def
+File: blx-compat.def 2015/10/21 v3.1 biblatex compatibility (PK/JW/AB)
+)
+Package biblatex Info: Trying to load generic definitions...
+Package biblatex Info: ... file 'biblatex.def' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/biblatex.def
+File: biblatex.def
+\c@textcitecount=\count307
+\c@textcitetotal=\count308
+\c@textcitemaxnames=\count309
+\c@biburlnumpenalty=\count310
+\c@biburlucpenalty=\count311
+\c@biburllcpenalty=\count312
+\c@smartand=\count313
+
+
+Package biblatex Warning: Redefining '\citeyear'.
+
+)
+Package biblatex Info: Trying to load bibliography style 'trad-abbrv'...
+Package biblatex Info: ... file 'trad-abbrv.bbx' found.
+ (/usr/share/texlive/texmf-dist/tex/latex/biblatex-trad/bbx/trad-abbrv.bbx
+File: trad-abbrv.bbx 2012/09/29
+Package biblatex Info: Trying to load bibliography style 'trad-standard'...
+Package biblatex Info: ... file 'trad-standard.bbx' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex-trad/bbx/trad-standard.bbx
+File: trad-standard.bbx 2012/09/29
+Package biblatex Info: Trying to load bibliography style 'standard'...
+Package biblatex Info: ... file 'standard.bbx' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
+File: standard.bbx 2015/10/21 v3.1 biblatex bibliography style (PK/JW/AB)
+\c@bbx:relatedcount=\count314
+\c@bbx:relatedtotal=\count315
+)))
+Package biblatex Info: Trying to load citation style 'trad-abbrv'...
+Package biblatex Info: ... file 'trad-abbrv.cbx' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex-trad/cbx/trad-abbrv.cbx
+File: trad-abbrv.cbx 2012/09/29
+Package biblatex Info: Trying to load citation style 'numeric'...
+Package biblatex Info: ... file 'numeric.cbx' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/cbx/numeric.cbx
+File: numeric.cbx 2015/10/21 v3.1 biblatex citation style (PK/JW/AB)
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\parencite'.
+Package biblatex Info: Redefining '\footcite'.
+Package biblatex Info: Redefining '\footcitetext'.
+Package biblatex Info: Redefining '\smartcite'.
+Package biblatex Info: Redefining '\supercite'.
+Package biblatex Info: Redefining '\textcite'.
+Package biblatex Info: Redefining '\textcites'.
+Package biblatex Info: Redefining '\cites'.
+Package biblatex Info: Redefining '\parencites'.
+Package biblatex Info: Redefining '\smartcites'.
+))
+Package biblatex Info: Trying to load configuration file...
+Package biblatex Info: ... file 'biblatex.cfg' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/biblatex.cfg
+File: biblatex.cfg
+)))
+(/usr/share/texlive/texmf-dist/tex/latex/cleveref/cleveref.sty
+Package: cleveref 2013/12/28 v0.19 Intelligent cross-referencing
+)
+Package biblatex Info: Trying to load language 'english'...
+Package biblatex Info: ... file 'english.lbx' found.
+
+(/usr/share/texlive/texmf-dist/tex/latex/biblatex/lbx/english.lbx
+File: english.lbx 2015/10/21 v3.1 biblatex localization (PK/JW/AB)
+)
+\@quotelevel=\count316
+\@quotereset=\count317
+
(./ipfs-cap2pfs.aux)
\openout1 = `ipfs-cap2pfs.aux'.
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 13.
-LaTeX Font Info: ... okay on input line 13.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 13.
-LaTeX Font Info: ... okay on input line 13.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 13.
-LaTeX Font Info: ... okay on input line 13.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 13.
-LaTeX Font Info: ... okay on input line 13.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 13.
-LaTeX Font Info: ... okay on input line 13.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 13.
-LaTeX Font Info: ... okay on input line 13.
-
-(/usr/local/texlive/2014basic/texmf-dist/tex/context/base/supp-pdf.mkii
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 19.
+LaTeX Font Info: ... okay on input line 19.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 19.
+LaTeX Font Info: ... okay on input line 19.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 19.
+LaTeX Font Info: ... okay on input line 19.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 19.
+LaTeX Font Info: ... okay on input line 19.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 19.
+LaTeX Font Info: ... okay on input line 19.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 19.
+LaTeX Font Info: ... okay on input line 19.
+
+(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
-\scratchcounter=\count132
+\scratchcounter=\count318
\scratchdimen=\dimen181
\scratchbox=\box41
-\nofMPsegments=\count133
-\nofMParguments=\count134
+\nofMPsegments=\count319
+\nofMParguments=\count320
\everyMPshowfont=\toks45
-\MPscratchCnt=\count135
+\MPscratchCnt=\count321
\MPscratchDim=\dimen182
-\MPnumerator=\count136
-\makeMPintoPDFobject=\count137
+\MPnumerator=\count322
+\makeMPintoPDFobject=\count323
\everyMPtoPDFconversion=\toks46
-) (/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
+) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/ifluatex.sty
-Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
-Package ifluatex Info: LuaTeX not detected.
-)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/ifpdf.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO)
Package ifpdf Info: pdfTeX in PDF mode is detected.
)
@@ -589,193 +815,188 @@ Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
)
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/oberdiek/grfext.sty
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO)
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty
Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO)
-)) (/usr/local/texlive/2014basic/texmf-dist/tex/latex/oberdiek/kvoptions.sty
-Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
-
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
-Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
-
-(/usr/local/texlive/2014basic/texmf-dist/tex/generic/oberdiek/etexcmds.sty
-Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
-Package etexcmds Info: Could not find \expanded.
-(etexcmds) That can mean that you are not using pdfTeX 1.50 or
-(etexcmds) that some package has redefined \expanded.
-(etexcmds) In the latter case, load this package earlier.
-)))
+))
Package grfext Info: Graphics extension search list:
(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE
G,.JBIG2,.JB2,.eps]
(grfext) \AppendGraphicsExtensions on input line 452.
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
+(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
-)) ABD: EveryShipout initializing macros
-LaTeX Font Info: Try loading font information for U+msa on input line 26.
-
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsfonts/umsa.fd
+))
+ABD: EveryShipout initializing macros
+Package biblatex Info: No input encoding detected.
+(biblatex) Assuming 'ascii'.
+Package biblatex Info: Automatic encoding selection.
+(biblatex) Assuming data encoding 'ascii'.
+\openout4 = `ipfs-cap2pfs.bcf'.
+
+Package biblatex Info: Trying to load bibliographic data...
+Package biblatex Info: ... file 'ipfs-cap2pfs.bbl' found.
+ (./ipfs-cap2pfs.bbl)
+Package biblatex Info: Reference section=0 on input line 19.
+Package biblatex Info: Reference segment=0 on input line 19.
+LaTeX Font Info: Try loading font information for U+msa on input line 32.
+
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
-LaTeX Font Info: Try loading font information for U+msb on input line 26.
+LaTeX Font Info: Try loading font information for U+msb on input line 32.
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/amsfonts/umsb.fd
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
)
-LaTeX Font Info: Try loading font information for U+lasy on input line 26.
+LaTeX Font Info: Try loading font information for U+lasy on input line 32.
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/base/ulasy.fd
+(/usr/share/texlive/texmf-dist/tex/latex/base/ulasy.fd
File: ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions
-)
-
-LaTeX Warning: Citation `CFS' on page \thepage undefined on input line 33.
-
-
-LaTeX Warning: Citation `Camlistore' on page \thepage undefined on input line
-39.
-
-
-LaTeX Warning: Citation `Dat' on page \thepage undefined on input line 39.
-
-[1{/usr/local/texlive/2014basic/texmf-var/fonts/map/pdftex/updmap/pdftex.map}
+) [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}
]
-LaTeX Font Info: Try loading font information for T1+aett on input line 88.
+Overfull \hbox (3.0741pt too wide) in paragraph at lines 73--75
+[]\T1/aer/m/n/9 Wide us-age in peer-to-peer ap-pli-ca-tions, in-clud-ing Gnu-
+ []
-(/usr/local/texlive/2014basic/texmf-dist/tex/latex/ae/t1aett.fd
+LaTeX Font Info: Try loading font information for T1+aett on input line 95.
+(/usr/share/texlive/texmf-dist/tex/latex/ae/t1aett.fd
File: t1aett.fd 1997/11/16 Font definitions for T1/aett.
)
-Overfull \hbox (3.61647pt too wide) in paragraph at lines 95--100
-\T1/aer/m/n/9 ``find-ing nearby data with-out query-ing dis-tant nodes'' [5]
+Overfull \hbox (3.61647pt too wide) in paragraph at lines 102--107
+\T1/aer/m/n/9 ``find-ing nearby data with-out query-ing dis-tant nodes'' [7]
[]
-Overfull \hbox (6.5502pt too wide) in paragraph at lines 128--130
-\T1/aer/m/n/9 ex-ploita-tive band-width shar-ing strate-gies. Prop-Share [8]
+Overfull \hbox (11.16713pt too wide) in paragraph at lines 135--137
+\T1/aer/m/n/9 ex-ploita-tive band-width shar-ing strate-gies. Prop-Share [10]
[]
-Overfull \hbox (4.33636pt too wide) in paragraph at lines 135--136
+Overfull \hbox (4.33636pt too wide) in paragraph at lines 142--143
\T1/aer/m/n/9 chang-ing over time and dis-tribute dif-fer-ent ver-sions ef-fi-c
iently.
[]
[2]
-Overfull \hbox (1.62833pt too wide) in paragraph at lines 176--177
+Overfull \hbox (1.62833pt too wide) in paragraph at lines 187--188
[]\T1/aer/bx/n/9 Exchange \T1/aer/m/n/9 - a novel block ex-change pro-to-col (B
itSwap)
[]
-Underfull \hbox (badness 1132) in paragraph at lines 194--194
+Underfull \hbox (badness 1132) in paragraph at lines 206--206
[][]\T1/aer/m/n/9 Throughout this doc-u-ment, \T1/aer/m/it/9 hash \T1/aer/m/n/9
and \T1/aer/m/it/9 check-sum \T1/aer/m/n/9 re-fer
[]
-Overfull \hbox (9.94414pt too wide) in paragraph at lines 222--222
-[] \T1/aett/m/n/9 p = count_preceding_zero_bits(hash(n.NodeId))[]
+Overfull \hbox (4.14857pt too wide) in paragraph at lines 237--237
+ [] \T1/aett/m/n/9 p = count_preceding_zero_bits(hash(n.NodeId))[]
[]
-
-Overfull \hbox (3.7414pt too wide) in paragraph at lines 237--238
-[]\T1/aer/m/n/9 IPFS nodes com-mu-ni-cate regualarly with hun-dreds of other
- []
-
-
-LaTeX Warning: Citation `WebRTC' on page \thepage undefined on input line 240.
-
-
[3]
-Overfull \hbox (1.94928pt too wide) in paragraph at lines 333--334
-\T1/aer/m/n/9 possible), to Bit-Thief [8] (ex-ploit-ing a vul-ner-a-bil-ity and
- never
+Overfull \hbox (4.14857pt too wide) in paragraph at lines 276--276
+ []\T1/aett/m/n/9 # an SCTP/IPv4 connection proxied over TCP/IPv4[]
[]
-Overfull \hbox (2.86789pt too wide) in paragraph at lines 338--340
-[]\T1/aer/m/n/9 be ef-fec-tive with and re-sis-tant to other, un-known strate-
+Overfull \hbox (8.8645pt too wide) in paragraph at lines 305--305
+ [] \T1/aett/m/n/9 // announces this node can serve a large value[]
[]
-\openout3 = `ipfs-cap2pfs.pgf-plot.gnuplot'.
-
-runsystem(gnuplot ipfs-cap2pfs.pgf-plot.gnuplot)...disabled (restricted).
-
-Package pgf Warning: Plot data file `ipfs-cap2pfs.pgf-plot.table' not found. on
- input line 369.
+Overfull \hbox (13.58043pt too wide) in paragraph at lines 305--305
+ [] \T1/aett/m/n/9 // gets a number of peers serving a large value[]
+ []
-Overfull \hbox (1.67198pt too wide) in paragraph at lines 376--387
+Overfull \hbox (1.67198pt too wide) in paragraph at lines 399--410
\T1/aer/m/n/9 as the nodes' \T1/aer/m/it/9 debt ra-tio \T1/aer/m/n/9 sur-passes
twice the es-tab-lished credit.
[]
[4]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 470--470
-[] \T1/aett/m/n/9 send_block (block :Block) -> (complete :Bool);[]
+Overfull \hbox (8.8645pt too wide) in paragraph at lines 496--496
+ [] \T1/aett/m/n/9 send_block (block :Block) -> (complete :Bool);[]
[]
-Overfull \hbox (4.7758pt too wide) in paragraph at lines 496--502
+Overfull \hbox (4.7758pt too wide) in paragraph at lines 523--529
\T1/aett/m/n/9 last_seen \T1/aer/m/n/9 times-tamp. Then, it com-pares the re-ce
ived \T1/aett/m/n/9 Ledger
[]
-Overfull \hbox (13.81113pt too wide) in paragraph at lines 506--510
+Overfull \hbox (13.81113pt too wide) in paragraph at lines 533--537
[]\T1/aer/m/n/9 While the con-nec-tion is open, nodes ad-ver-tise their \T1/aet
t/m/n/9 want_list
[]
[5]
-Overfull \hbox (4.14857pt too wide) in paragraph at lines 616--616
+Overfull \hbox (4.14857pt too wide) in paragraph at lines 644--644
[]\T1/aett/m/n/9 XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x 189458 less[]
[]
-Overfull \hbox (8.8645pt too wide) in paragraph at lines 616--616
+Overfull \hbox (8.8645pt too wide) in paragraph at lines 644--644
[]\T1/aett/m/n/9 XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5 19441 script[]
[]
-Overfull \hbox (13.58043pt too wide) in paragraph at lines 616--616
+Overfull \hbox (13.58043pt too wide) in paragraph at lines 644--644
[]\T1/aett/m/n/9 XLF4hwVHsVuZ78FZK6fozf8Jj9WEURMbCX4 5286 template[]
[]
-Overfull \hbox (8.43875pt too wide) in paragraph at lines 618--619
+Overfull \hbox (8.43875pt too wide) in paragraph at lines 646--647
[]\T1/aer/m/n/9 Resolve string path lookups, such as \T1/aett/m/n/9 foo/bar/baz
\T1/aer/m/n/9 . Given
[]
-[6] [7]
-Overfull \hbox (1.43738pt too wide) in paragraph at lines 750--755
+[6]
+Overfull \hbox (13.58043pt too wide) in paragraph at lines 682--682
+ []\T1/aett/m/n/9 /ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/foo.txt[]
+ []
+
+
+Overfull \hbox (11.04955pt too wide) in paragraph at lines 769--770
+\T1/aer/m/n/9 this struc-ture is ac-tu-ally bi-nary en-coded us-ing Pro-to-col
+Buffers,
+ []
+
+[7]
+Overfull \hbox (1.43738pt too wide) in paragraph at lines 789--794
\T1/aer/m/n/9 made up of sev-eral IPFS \T1/aett/m/n/9 blobs \T1/aer/m/n/9 con-c
ate-nated to-gether. \T1/aett/m/n/9 lists
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 770--770
-[] \T1/aett/m/n/9 { "hash": "XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x",[]
+Overfull \hbox (18.29636pt too wide) in paragraph at lines 810--810
+ [] \T1/aett/m/n/9 // lists have an array of object types as data[]
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 770--770
-[] \T1/aett/m/n/9 { "hash": "XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 810--810
+ [] \T1/aett/m/n/9 { "hash": "XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x",[]
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 770--770
-[] \T1/aett/m/n/9 { "hash": "XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 810--810
+ [] \T1/aett/m/n/9 { "hash": "XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5",[]
+ []
+
+
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 810--810
+ [] \T1/aett/m/n/9 { "hash": "XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z",[]
[]
Missing character: There is no ; in font nullfont!
@@ -784,120 +1005,143 @@ Missing character: There is no ; in font nullfont!
Missing character: There is no ; in font nullfont!
Missing character: There is no ; in font nullfont!
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 874--874
-[] \T1/aett/m/n/9 { "hash": "XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 916--916
+ [] \T1/aett/m/n/9 { "hash": "XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x",[]
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 874--874
-[] \T1/aett/m/n/9 { "hash": "XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 916--916
+ [] \T1/aett/m/n/9 { "hash": "XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5",[]
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 874--874
-[] \T1/aett/m/n/9 { "hash": "XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 916--916
+ [] \T1/aett/m/n/9 { "hash": "XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z",[]
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 897--897
-[] \T1/aett/m/n/9 { "hash": "XLa1qMBKiSEEDhojb9FFZ4tEvLf7FEQdhdU",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 941--941
+ [] \T1/aett/m/n/9 { "hash": "XLa1qMBKiSEEDhojb9FFZ4tEvLf7FEQdhdU",[]
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 897--897
-[] \T1/aett/m/n/9 { "hash": "XLGw74KAy9junbh28x7ccWov9inu1Vo7pnX",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 941--941
+ [] \T1/aett/m/n/9 { "hash": "XLGw74KAy9junbh28x7ccWov9inu1Vo7pnX",[]
[]
[8]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 897--897
-[] \T1/aett/m/n/9 { "hash": "XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm",[]
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 941--941
+ [] \T1/aett/m/n/9 { "hash": "XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm",[]
[]
-LaTeX Warning: Citation `RabinFingerprints' on page \thepage undefined on inpu
-t line 921.
-
+Overfull \hbox (8.9342pt too wide) in paragraph at lines 985--989
+[]\T1/aer/bx/n/9 flattened trees\T1/aer/m/n/9 : for any given \T1/aett/m/n/9 tr
+ee\T1/aer/m/n/9 , a spe-cial \T1/aett/m/n/9 flattened
+ []
-LaTeX Warning: Citation `LBFS' on page \thepage undefined on input line 921.
+Overfull \hbox (18.29636pt too wide) in paragraph at lines 1012--1012
+ [] \T1/aett/m/n/9 ["tree", "blob", "tree", "list", "blob" "blob"],[]
+ []
-LaTeX Warning: Citation `rsync' on page \thepage undefined on input line 922.
+Overfull \hbox (27.72821pt too wide) in paragraph at lines 1012--1012
+ [] \T1/aett/m/n/9 "name": "ttt333-name/lll111-name/bbb222-name" },[]
+ []
-Overfull \hbox (8.9342pt too wide) in paragraph at lines 938--942
-[]\T1/aer/bx/n/9 flattened trees\T1/aer/m/n/9 : for any given \T1/aett/m/n/9 tr
-ee\T1/aer/m/n/9 , a spe-cial \T1/aett/m/n/9 flattened
+[9]
+Overfull \hbox (23.01228pt too wide) in paragraph at lines 1075--1075
+ []\T1/aett/m/n/9 /ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/docs/ipfs[]
[]
-Overfull \hbox (5.22821pt too wide) in paragraph at lines 964--964
-[] \T1/aett/m/n/9 "name": "ttt333-name/lll111-name/bbb222-name" },[]
+Overfull \hbox (32.44414pt too wide) in paragraph at lines 1105--1105
+ []\T1/aett/m/n/9 ipfs link //friends/bob /[]
[]
-LaTeX Warning: Citation `Plan9' on page \thepage undefined on input line 979.
-
+Overfull \hbox (37.16006pt too wide) in paragraph at lines 1105--1105
+ []\T1/aett/m/n/9 ipfs link /[]
+ []
-LaTeX Warning: Citation `Fossil' on page \thepage undefined on input line 979.
+[10]
+Overfull \hbox (10.76414pt too wide) in paragraph at lines 1201--1201
+[]\T1/aer/m/n/9 J. Dean and S. Ghe-mawat. Leveldb--a fast and lightweight
+ []
+Overfull \hbox (3.16586pt too wide) in paragraph at lines 1201--1201
+[]\T1/aer/m/n/9 J. H. Howard, M. L. Kazar, S. G. Me-nees, D. A. Nichols,
+ []
-LaTeX Warning: Citation `Venti' on page \thepage undefined on input line 979.
+Overfull \hbox (2.85959pt too wide) in paragraph at lines 1201--1201
+\T1/aer/m/n/9 M. Satya-narayanan, R. N. Side-botham, and M. J. West.
+ []
-LaTeX Warning: Citation `LBFS' on page \thepage undefined on input line 979.
-[9]
-Overfull \hbox (9.94414pt too wide) in paragraph at lines 1055--1055
-[]\T1/aett/m/n/9 ipfs link //friends/bob /[]
+Overfull \hbox (13.38684pt too wide) in paragraph at lines 1201--1201
+\T1/aer/m/it/9 ACM trans-ac-tions on com-puter sys-tems (TOCS)\T1/aer/m/n/9 , 6
+(1):51^^U
[]
-Overfull \hbox (14.66006pt too wide) in paragraph at lines 1055--1055
-[]\T1/aett/m/n/9 ipfs link /[]
+Overfull \hbox (4.84273pt too wide) in paragraph at lines 1201--1201
+\T1/aer/m/it/9 sym-po-sium on op-er-at-ing sys-tems prin-ci-ples\T1/aer/m/n/9 .
+ ACM, 2013,
[]
-LaTeX Warning: Citation `Proquint' on page \thepage undefined on input line 10
-75.
+Overfull \hbox (7.35242pt too wide) in paragraph at lines 1201--1201
+\T1/aer/m/it/9 er-at-ing sys-tems re-view\T1/aer/m/n/9 . Vol. 35. (5). ACM, 200
+1, pp. 174^^U
+ []
+
+[11]
+Overfull \hbox (11.47125pt too wide) in paragraph at lines 1201--1201
+\T1/aer/m/n/9 Low ex-tra de-lay back-ground trans-port (LED-BAT). \T1/aer/m/it/
+9 Draft-
+ []
-Overfull \hbox (3.25519pt too wide) in paragraph at lines 1102--1103
-[]\T1/aer/m/n/9 As a mounted global filesys-tem, un-der \T1/aett/m/n/9 /ipfs \T
-1/aer/m/n/9 and \T1/aett/m/n/9 /ipns\T1/aer/m/n/9 .
+Overfull \hbox (2.89229pt too wide) in paragraph at lines 1201--1201
+\T1/aer/m/n/9 In \T1/aer/m/it/9 Peer-to-peer com-put-ing (P2P), 2013 IEEE thir-
+teenth
[]
-[10]
+[12
-LaTeX Warning: Citation `FUSE' on page \thepage undefined on input line 1121.
+] (./ipfs-cap2pfs.aux)
+Package logreq Info: Writing requests to 'ipfs-cap2pfs.run.xml'.
+\openout1 = `ipfs-cap2pfs.run.xml'.
-(./ipfs-cap2pfs.bbl) [11] (./ipfs-cap2pfs.aux) )
+ )
Here is how much of TeX's memory you used:
- 13945 strings out of 494522
- 276351 string characters out of 6167205
- 310906 words of memory out of 5000000
- 16894 multiletter control sequences out of 15000+600000
- 52073 words of font info for 72 fonts, out of 8000000 for 9000
- 319 hyphenation exceptions out of 8191
- 55i,11n,54p,1259b,862s stack positions out of 5000i,500n,10000p,200000b,80000s
-{/usr/local/texlive/2014basic/t
-exmf-dist/fonts/enc/dvips/base/8r.enc}
-Output written on ipfs-cap2pfs.pdf (11 pages, 213363 bytes).
+ 20924 strings out of 494965
+ 406739 string characters out of 6181076
+ 796944 words of memory out of 5000000
+ 23813 multiletter control sequences out of 15000+600000
+ 55009 words of font info for 77 fonts, out of 8000000 for 9000
+ 14 hyphenation exceptions out of 8191
+ 55i,11n,54p,1276b,980s stack positions out of 5000i,500n,10000p,200000b,80000s
+{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}
+Output written on ipfs-cap2pfs.pdf (12 pages, 224933 bytes).
PDF statistics:
- 92 PDF objects out of 1000 (max. 8388607)
- 66 compressed objects within 1 object stream
+ 99 PDF objects out of 1000 (max. 8388607)
+ 71 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
13 words of extra memory for PDF output out of 10000 (max. 10000000)
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.pgf-plot.table b/ipfs-cap2pfs/ipfs-cap2pfs.pgf-plot.table
new file mode 100644
index 0000000..40fb92d
--- /dev/null
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.pgf-plot.table
@@ -0,0 +1,30 @@
+
+# Curve 0 of 1, 25 points
+# Curve title: "1 - 1/(1+exp(6-3*x))"
+# x y type
+0.00000 0.99753 i
+0.16667 0.99593 i
+0.33333 0.99331 i
+0.50000 0.98901 i
+0.66667 0.98201 i
+0.83333 0.97069 i
+1.00000 0.95257 i
+1.16667 0.92414 i
+1.33333 0.88080 i
+1.50000 0.81757 i
+1.66667 0.73106 i
+1.83333 0.62246 i
+2.00000 0.50000 i
+2.16667 0.37754 i
+2.33333 0.26894 i
+2.50000 0.18243 i
+2.66667 0.11920 i
+2.83333 0.07586 i
+3.00000 0.04743 i
+3.16667 0.02931 i
+3.33333 0.01799 i
+3.50000 0.01099 i
+3.66667 0.00669 i
+3.83333 0.00407 i
+4.00000 0.00247 i
+
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.run.xml b/ipfs-cap2pfs/ipfs-cap2pfs.run.xml
new file mode 100644
index 0000000..5796d85
--- /dev/null
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.run.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+ latex
+
+ ipfs-cap2pfs.bcf
+
+
+ ipfs-cap2pfs.bbl
+
+
+ blx-dm.def
+ blx-compat.def
+ biblatex.def
+ trad-abbrv.bbx
+ trad-standard.bbx
+ standard.bbx
+ trad-abbrv.cbx
+ numeric.cbx
+ biblatex.cfg
+ english.lbx
+
+
+
+ biber
+
+ biber
+ ipfs-cap2pfs
+
+
+ ipfs-cap2pfs.bcf
+
+
+
+ ipfs-cap2pfs.bbl
+
+
+ ipfs-cap2pfs.bcf
+
+
+ ipfs-cap2pfs.bib
+
+
+
diff --git a/ipfs-cap2pfs/ipfs-cap2pfs.tex b/ipfs-cap2pfs/ipfs-cap2pfs.tex
index 2be1397..8033d04 100644
--- a/ipfs-cap2pfs/ipfs-cap2pfs.tex
+++ b/ipfs-cap2pfs/ipfs-cap2pfs.tex
@@ -10,9 +10,15 @@
\usepackage{mathtools}
\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil}
+%% This supports ``@online{}`` in bibliography.
+\usepackage[backend=biber,style=trad-abbrv]{biblatex}
+\bibliography{ipfs-cap2pfs}
+
+\usepackage{cleveref}
+
\begin{document}
-\title{IPFS - Content Addressed, Versioned, P2P File System (DRAFT 3)}
+\title{IPFS - Content-Addressed, Versioned, P2P File System (DRAFT 3)}
\subtitle{}
\numberofauthors{1}
@@ -25,28 +31,29 @@
\maketitle
\begin{abstract}
-The InterPlanetary File System (IPFS) is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. In some ways, IPFS is similar to the Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high throughput content-addressed block storage model, with content-addressed hyper links. This forms a generalized Merkle DAG, a data structure upon which one can build versioned file systems, blockchains, and even a Permanent Web. IPFS combines a distributed hashtable, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other.
+The InterPlanetary File System (IPFS) is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. In some ways, IPFS is similar to the Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high throughput content-addressed block storage model, with content-addressed hyperlinks. This forms a generalized Merkle DAG, a data structure upon which one can build versioned file systems, blockchains, and even a Permanent Web. IPFS combines a distributed hashtable, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other.
\end{abstract}
\section{Introduction}
There have been many attempts at constructing a global distributed file system. Some systems have seen significant success, and others failed completely. Among the academic attempts, AFS~\cite{AFS} has succeeded widely and is still in use today. Others~\cite{Oceanstore, CFS} have not attained the same success. Outside of academia, the most successful systems have been peer-to-peer file-sharing applications primarily geared toward large media (audio and video). Most notably, Napster, KaZaA, and BitTorrent~\cite{BitTorrentUsers} deployed large file distribution systems supporting over 100 million simultaneous users. Even today, BitTorrent maintains a massive deployment where tens of millions of nodes churn daily~\cite{wang13}. These applications saw greater numbers of users and files distributed than their academic file system counterparts. However, the applications were not designed as infrastructure to be built upon. While there have been successful repurposings\footnote{For example, Linux distributions use BitTorrent to transmit disk images, and Blizzard, Inc. uses it to distribute video game content.}, no general file-system has emerged that offers global, low-latency, and decentralized distribution.
-Perhaps this is because a ``good enough'' system for most use cases already exists: HTTP. By far, HTTP is the most successful ``distributed system of files'' ever deployed. Coupled with the browser, HTTP has had enormous technical and social impact. It has become the de facto way to transmit files across the internet. Yet, it fails to take advantage of dozens of brilliant file distribution techniques invented in the last fifteen years. From one prespective, evolving Web infrastructure is near-impossible, given the number of backwards compatibility constraints and the number of strong parties invested in the current model. But from another perspective, new protocols have emerged and gained wide use since the emergence of HTTP. What is lacking is upgrading design: enhancing the current HTTP web, and introducing new functionality without degrading user experience.
+Perhaps this is because a ``good enough'' system for most use cases already exists: HTTP. By far, HTTP is the most successful ``distributed system of files'' ever deployed. Coupled with the browser, HTTP has had enormous technical and social impact. It has become the de facto way to transmit files across the Internet. Yet, it fails to take advantage of dozens of brilliant file distribution techniques invented in the last fifteen years. From one prespective, evolving Web infrastructure is nearly impossible, given the number of backwards compatibility constraints and the number of strong parties who have invested in the current model. But from another perspective, new protocols have emerged and gained wide use since the emergence of HTTP. What is lacking is upgrading design: enhancing the current HTTP web, and introducing new functionality without degrading user experience.
Industry has gotten away with using HTTP this long because moving small files around is relatively cheap, even for small organizations with lots of traffic. But we are entering a new era of data distribution with new challenges: (a) hosting and distributing petabyte datasets, (b) computing on large data across organizations, (c) high-volume high-definition on-demand or real-time media streams, (d) versioning and linking of massive datasets, (e) preventing accidental disappearance of important files, and more. Many of these can be boiled down to ``lots of data, accessible everywhere.'' Pressed by critical features and bandwidth concerns, we have already given up HTTP for different data distribution protocols. The next step is making them part of the Web itself.
-Orthogonal to efficient data distribution, version control systems have managed to develop important data collaboration workflows. Git, the distributed source code version control system, developed many useful ways to model and implement distributed data operations. The Git toolchain offers versatile versioning functionality that large file distribution systems severely lack. New solutions inspired by Git are emerging, such as Camlistore~\cite{Camlistore}, a personal file storage system, and Dat~\cite{Dat} a data collaboration toolchain and dataset package manager. Git has already influenced distributed filesystem design~\cite{mashtizadeh13}, as its content addressed Merkle DAG data model enables powerful file distribution strategies. What remains to be explored is how this data structure can influence the design of high-throughput oriented file systems, and how it might upgrade the Web itself.
+Orthogonal to efficient data distribution, version control systems have managed to develop important data collaboration workflows. Git, the distributed source code version control system, developed many useful ways to model and implement distributed data operations. The Git toolchain offers versatile versioning functionality that large file distribution systems severely lack. New solutions inspired by Git are emerging, such as Camlistore~\cite{Camlistore}, a personal file storage system, and Dat~\cite{Dat} a data collaboration toolchain and dataset package manager. Git has already influenced distributed file system design~\cite{mashtizadeh13}, as its content-addressed Merkle DAG data model enables powerful file distribution strategies. What remains to be explored is how this data structure can influence the design of high-throughput oriented file systems, and how it might upgrade the Web itself.
-This paper introduces IPFS, a novel peer-to-peer version-controlled filesystem seeking to reconcile these issues. IPFS synthesizes learnings from many past successful systems. Careful interface-focused integration yields a system greater than the sum of its parts. The central IPFS principle is modeling \textit{all data} as part of the same Merkle DAG.
+This paper introduces IPFS, a novel peer-to-peer version-controlled file system seeking to reconcile these issues. IPFS synthesizes learnings from many past successful systems. Careful interface-focused integration yields a system greater than the sum of its parts. The central IPFS principle is modeling \textit{all data} as part of the same Merkle DAG.
\section{Background}
This section reviews important properties of successful peer-to-peer systems, which IPFS combines.
\subsection{Distributed Hash Tables}
+\label{sec:bg-dhts}
-Distributed Hash Tables (DHTs) are widely used to coordinate and maintain metadata about peer-to-peer systems. For example, the BitTorrent MainlineDHT tracks sets of peers part of a torrent swarm.
+Distributed Hash Tables (DHTs) are widely used to coordinate and maintain metadata about peer-to-peer systems. For example, the BitTorrent Mainline DHT tracks sets of peers part of a torrent swarm.
\subsubsection{Kademlia DHT}
@@ -55,30 +62,30 @@ \subsubsection{Kademlia DHT}
\begin{enumerate}
\item Efficient lookup through massive networks:
- queries on average contact $ \ceil{log_2 (n)} $ nodes.
- (e.g. $20$ hops for a network of $10,000,000$ nodes).
+ queries on average contact $ \ceil{log_2 (n)} $ nodes
+ (e.g. $20$ hops for a network of $1,000,000$ nodes).
\item Low coordination overhead: it optimizes the number of
control messages it sends to other nodes.
\item Resistance to various attacks by preferring long-lived nodes.
- \item Wide usage in peer-to-peer applications, including \\
- Gnutella and BitTorrent, forming networks of over 20 million nodes~\cite{wang13}.
+ \item Wide usage in peer-to-peer applications, including
+ Gnu\-tella and BitTorrent, forming networks of over 20 million nodes~\cite{wang13}.
- \end{enumerate}
+\end{enumerate}
\subsubsection{Coral DSHT}
-While some peer-to-peer filesystems store data blocks directly in DHTs,
+While some peer-to-peer file systems store data blocks directly in DHTs,
this ``wastes storage and bandwidth, as data must be stored at nodes where it
is not needed''~\cite{freedman04}. The Coral DSHT extends Kademlia in three
particularly important ways:
\begin{enumerate}
- \item Kademlia stores values in nodes whose ids are ``nearest'' (using
+ \item Kademlia stores values in nodes whose identifiers are ``nearest'' (using
XOR-distance) to the key. This does not take into account application
data locality, ignores ``far'' nodes that may already have the data,
and forces ``nearest'' nodes to store it, whether they need it or not.
@@ -107,7 +114,7 @@ \subsubsection{S/Kademlia DHT}
\begin{enumerate}
\item S/Kademlia provides schemes to secure \texttt{NodeId} generation,
- and prevent Sybill attacks. It requires nodes to create a PKI key pair, derive their identity from it, and sign their messages to each other. One scheme includes a proof-of-work crypto puzzle to make generating Sybills expensive.
+ and prevent Sybil attacks. It requires nodes to create a PKI key pair, derive their identity from it, and sign their messages to each other. One scheme includes a proof-of-work crypto puzzle to make generating Sybils expensive.
\item S/Kademlia nodes lookup values over disjoint paths, in order to
ensure honest nodes can connect to each other in the presence of a large fraction of adversaries in the network. S/Kademlia achieves a success rate of 0.85 even with an adversarial fraction as large as half of the nodes.
@@ -132,7 +139,7 @@ \subsection{Block Exchanges - BitTorrent}
\subsection{Version Control Systems - Git}
-Version Control Systems provide facilities to model files changing over time and distribute different versions efficiently. The popular version control system Git provides a powerful Merkle DAG \footnote{Merkle Directed Acyclic Graph -- similar but more general construction than a Merkle Tree. Deduplicated, does not need to be balanced, and non-leaf nodes contain data.} object model that captures changes to a filesystem tree in a distributed-friendly way.
+Version Control Systems provide facilities to model files changing over time and distribute different versions efficiently. The popular version control system Git provides a powerful Merkle DAG\footnote{Merkle Directed Acyclic Graph -- similar but more general construction than a Merkle Tree. Deduplicated, does not need to be balanced, and non-leaf nodes contain data.} object model that captures changes to a file system tree in a distributed-friendly way:
\begin{enumerate}
\item Immutable objects represent Files (\texttt{blob}), Directories (\texttt{tree}), and Changes (\texttt{commit}).
@@ -144,42 +151,46 @@ \subsection{Version Control Systems - Git}
\item Distributing version changes to other users is simply transferring objects and updating remote references.
\end{enumerate}
-\subsection{Self-Certified Filesystems - SFS}
+\subsection{Self-Certified File Systems - SFS}
-SFS~\cite{mazieres98, mazieres00} proposed compelling implementations of both (a) distributed trust chains, and (b) egalitarian shared global namespaces. SFS introduced a technique for building \textit{Self-Certified Filesystems}: addressing remote filesystems using the following scheme
+SFS~\cite{mazieres98, mazieres00} proposed compelling implementations of both (a) distributed trust chains, and (b) egalitarian shared global namespaces. SFS introduced a technique for building \textit{Self-Certified File Systems}, addressing remote file systems using the following scheme:
+\begin{quote}
\begin{verbatim}
- /sfs/:
+/sfs/:
\end{verbatim}
+\end{quote}
\noindent where \texttt{Location} is the server network address, and:
+\begin{quote}
\begin{verbatim}
- HostID = hash(public_key || Location)
+HostID = hash(public_key || Location)
\end{verbatim}
+\end{quote}
Thus the \textit{name} of an SFS file system certifies its server. The user can verify the public key offered by the server, negotiate a shared secret, and secure all traffic. All SFS instances share a global namespace where name allocation is cryptographic, not gated by any centralized body.
\section{IPFS Design}
-IPFS is a distributed file system which synthesizes successful ideas from previous peer-to-peer sytems, including DHTs, BitTorrent, Git, and SFS. The contribution of IPFS is simplifying, evolving, and connecting proven techniques into a single cohesive system, greater than the sum of its parts. IPFS presents a new platform for writing and deploying applications, and a new system for distributing and versioning large data. IPFS could even evolve the web itself.
+IPFS is a distributed file system which synthesizes successful ideas from previous peer-to-peer sytems, including DHTs, BitTorrent, Git, and SFS. The contribution of IPFS is simplifying, evolving, and connecting proven techniques into a single cohesive system, greater than the sum of its parts. IPFS presents a new platform for writing and deploying applications, and a new system for distributing and versioning large data. IPFS could even evolve the Web itself.
IPFS is peer-to-peer; no nodes are privileged. IPFS nodes store IPFS objects in local storage. Nodes connect to each other and transfer objects. These objects represent files and other data structures. The IPFS Protocol is divided into a stack of sub-protocols responsible for different functionality:
\begin{enumerate}
- \item \textbf{Identities} - manage node identity generation and verification. Described in Section 3.1.
+ \item \textbf{Identities} - manage node identity generation and verification. Described in \Cref{sec:design-identities}.
- \item \textbf{Network} - manages connections to other peers, uses various underlying network protocols. Configurable. Described in Section 3.2.
+ \item \textbf{Network} - manages connections to other peers, uses various underlying network protocols. Configurable. Described in \Cref{sec:design-network}.
- \item \textbf{Routing} - maintains information to locate specific peers and objects. Responds to both local and remote queries. Defaults to a DHT, but is swappable. Described in Section 3.3.
+ \item \textbf{Routing} - maintains information to locate specific peers and objects. Responds to both local and remote queries. Defaults to a DHT, but is swappable. Described in \Cref{sec:design-routing}.
- \item \textbf{Exchange} - a novel block exchange protocol (BitSwap) that governs efficient block distribution. Modelled as a market, weakly incentivizes data replication. Trade Strategies swappable. Described in Section 3.4.
+ \item \textbf{Exchange} - a novel block exchange protocol (BitSwap) that governs efficient block distribution. Modelled as a market, weakly incentivizes data replication. Trade strategies are swappable. Described in \Cref{sec:design-exchange}.
- \item \textbf{Objects} - a Merkle DAG of content-addressed immutable objects with links. Used to represent arbitrary datastructures, e.g. file hierarchies and communication systems. Described in Section 3.5.
+ \item \textbf{Objects} - a Merkle DAG of content-addressed immutable objects with links. Used to represent arbitrary data structures, e.g. file hierarchies and communication systems. Described in \Cref{sec:design-objects}.
- \item \textbf{Files} - versioned file system hierarchy inspired by Git. Described in Section 3.6.
+ \item \textbf{Files} - versioned file system hierarchy inspired by Git. Described in \Cref{sec:design-files}.
- \item \textbf{Naming} - A self-certifying mutable name system. Described in Section 3.7.
+ \item \textbf{Naming} - A self-certifying mutable name system. Described in \Cref{sec:design-ipns}.
\end{enumerate}
@@ -190,116 +201,128 @@ \section{IPFS Design}
Notation: data structures and functions below are specified in Go syntax.
\subsection{Identities}
+\label{sec:design-identities}
-Nodes are identified by a \texttt{NodeId}, the cryptographic hash\footnote{Throughout this document, \textit{hash} and \textit{checksum} refer specifically to cryptographic hashes of data.} of a public-key, created with S/Kademlia's static crypto puzzle~\cite{baumgart07}. Nodes store their public and private keys (encrypted with a passphrase). Users are free to instatiate a ``new'' node identity on every launch, though that loses accrued network benefits. Nodes are incentivized to remain the same.
+Nodes are identified by a \texttt{NodeId}, the cryptographic hash\footnote{Throughout this document, \textit{hash} and \textit{checksum} refer specifically to cryptographic hashes of data.} of a public key, created with S/Kademlia's static crypto puzzle~\cite{baumgart07}. Nodes store their public and private keys (encrypted with a passphrase). Users are free to instatiate a ``new'' node identity on every launch, though that loses accrued network benefits. Nodes are incentivized to remain the same.
+\begin{quote}
\begin{verbatim}
- type NodeId Multihash
- type Multihash []byte
- // self-describing cryptographic hash digest
-
- type PublicKey []byte
- type PrivateKey []byte
- // self-describing keys
-
- type Node struct {
- NodeId NodeID
- PubKey PublicKey
- PriKey PrivateKey
- }
+type NodeId Multihash
+type Multihash []byte
+// self-describing cryptographic hash digest
+
+type PublicKey []byte
+type PrivateKey []byte
+// self-describing keys
+
+type Node struct {
+ NodeId NodeId
+ PubKey PublicKey
+ PrivKey PrivateKey
+}
\end{verbatim}
+\end{quote}
-S/Kademlia based IPFS identity generation:
+S/Kademlia-based IPFS identity generation:
+\begin{quote}
\begin{verbatim}
- difficulty =
- n = Node{}
- do {
- n.PubKey, n.PrivKey = PKI.genKeyPair()
- n.NodeId = hash(n.PubKey)
- p = count_preceding_zero_bits(hash(n.NodeId))
- } while (p < difficulty)
+difficulty =
+n = Node{}
+do {
+ n.PubKey, n.PrivKey = PKI.genKeyPair()
+ n.NodeId = hash(n.PubKey)
+ p = count_preceding_zero_bits(hash(n.NodeId))
+} while (p < difficulty)
\end{verbatim}
+\end{quote}
+Upon first connecting, peers exchange public keys, and check that \texttt{hash(other.PublicKey)} equals \texttt{other.NodeId}. If not, the connection is terminated.
-Upon first connecting, peers exchange public keys, and check: \texttt{hash(other.PublicKey) equals other.NodeId}. If not, the connection is terminated.
-
-\paragraph{Note on Cryptographic Functions} Rather than locking the system to a particular set of function choices, IPFS favors self-describing values. Hash digest values are stored in \texttt{multihash} format, which includes a short header specifying the hash function used, and the digest length in bytes. Example:
+\paragraph{Note on Cryptographic Functions}
+Rather than locking the system to a particular set of function choices, IPFS favors self-describing values. Hash digest values are stored in \texttt{multihash} format, which includes a short header specifying the hash function used, and the digest length in bytes:
+\begin{quote}
\begin{verbatim}
-
+
\end{verbatim}
+\end{quote}
This allows the system to (a) choose the best function for the use case (e.g. stronger security vs faster performance), and (b) evolve as function choices change. Self-describing values allow using different parameter choices compatibly.
\subsection{Network}
+\label{sec:design-network}
-IPFS nodes communicate regularly with hundreds of other nodes in the network, potentially across the wide internet. The IPFS network stack features:
+IPFS nodes communicate regularly with hundreds of other nodes in the network, potentially across the wide Internet. The IPFS network stack features:
\begin{itemize}
- \item \textbf{Transport:} IPFS can use any transport protocol, and is best suited for WebRTC DataChannels~\cite{WebRTC} (for browser connectivity) or uTP(LEDBAT~\cite{LEDBAT}).
+ \item \textbf{Transport:} IPFS can use any transport protocol, and is best suited for WebRTC data channels~\cite{WebRTC} (for browser connectivity) or uTP (LEDBAT~\cite{LEDBAT}).
\item \textbf{Reliability:} IPFS can provide reliability if underlying networks do not provide it, using uTP (LEDBAT~\cite{LEDBAT}) or SCTP~\cite{SCTP}.
- \item \textbf{Connectivity:} IPFS also uses the ICE NAT traversal techniques \cite{ICE}.
- \item \textbf{Integrity:} optionally checks integrity of messages using a hash checksum.
- \item \textbf{Authenticity:} optionally checks authenticity of messages by digitally signing them with the sender's private key.
+ \item \textbf{Connectivity:} IPFS also uses the ICE NAT traversal techniques~\cite{ICE}.
+ \item \textbf{Integrity:} IPFS optionally checks integrity of messages using a hash checksum.
+ \item \textbf{Authenticity:} IPFS optionally checks authenticity of messages by digitally signing them with the sender's private key.
\end{itemize}
-\subsubsection{Note on Peer Addressing}
-
-IPFS can use any network; it does not rely on or assume access to IP. This allows IPFS to be used in overlay networks. IPFS stores addresses as \texttt{multiaddr} formatted byte strings for the underlying network to use. \texttt{multiaddr} provides a way to express addresses and their protocols, including support for encapsulation. For example:
+\paragraph{Note on Peer Addressing}
+IPFS can use any network; it does not rely on or assume access to IP. This allows IPFS to be used in overlay networks. IPFS stores addresses as \texttt{multiaddr}-formatted byte strings for the underlying network to use. \texttt{multiaddr} provides a way to express addresses and their protocols, including support for encapsulation. For example:
+\begin{quote}
\begin{verbatim}
- # an SCTP/IPv4 connection
- /ip4/10.20.30.40/sctp/1234/
+# an SCTP/IPv4 connection
+/ip4/10.20.30.40/sctp/1234/
- # an SCTP/IPv4 connection proxied over TCP/IPv4
- /ip4/5.6.7.8/tcp/5678/ip4/1.2.3.4/sctp/1234/
+# an SCTP/IPv4 connection proxied over TCP/IPv4
+/ip4/5.6.7.8/tcp/5678/ip4/1.2.3.4/sctp/1234/
\end{verbatim}
+\end{quote}
\subsection{Routing}
+\label{sec:design-routing}
-IPFS nodes require a routing system that can find (a) other peers' network addresses and (b) peers who can serve particular objects. IPFS achieves this using a DSHT based on S/Kademlia and Coral, using the properties discussed in 2.1. The size of objects and use patterns of IPFS are similar to Coral \cite{freedman04} and Mainline~\cite{wang13}, so the IPFS DHT makes a distinction for values stored based on their size. Small values (equal to or less than \texttt{1KB}) are stored directly on the DHT. For larger values, the DHT stores references, which are the \texttt{NodeIds} of peers who can serve the block.
+IPFS nodes require a routing system that can find (a) other peers' network addresses and (b) peers who can serve particular objects. IPFS achieves this using a DSHT based on S/Kademlia and Coral, using the properties discussed in \Cref{sec:bg-dhts}. The size of objects and use patterns of IPFS are similar to Coral~\cite{freedman04} and Mainline~\cite{wang13}, so the IPFS DHT makes a distinction for values stored based on their size. Small values (equal to or less than 1~KiB) are stored directly on the DHT. For larger values, the DHT stores references, which are the \texttt{NodeIds} of peers who can serve the block.
The interface of this DSHT is the following:
+\begin{quote}
\begin{verbatim}
+type IPFSRouting interface {
- type IPFSRouting interface {
+ FindPeer(node NodeId)
+ // gets a particular peer's network address
- FindPeer(node NodeId)
- // gets a particular peer's network address
+ SetValue(key []bytes, value []bytes)
+ // stores a small metadata value in DHT
- SetValue(key []bytes, value []bytes)
- // stores a small metadata value in DHT
+ GetValue(key []bytes)
+ // retrieves small metadata value from DHT
- GetValue(key []bytes)
- // retrieves small metadata value from DHT
+ ProvideValue(key Multihash)
+ // announces this node can serve a large value
- ProvideValue(key Multihash)
- // announces this node can serve a large value
-
- FindValuePeers(key Multihash, min int)
- // gets a number of peers serving a large value
- }
+ FindValuePeers(key Multihash, min int)
+ // gets a number of peers serving a large value
+}
\end{verbatim}
+\end{quote}
-Note: different use cases will call for substantially different routing systems (e.g. DHT in wide network, static HT in local network). Thus the IPFS routing system can be swapped for one that fits users' needs. As long as the interface above is met, the rest of the system will continue to function.
+Note that different use cases will call for substantially different routing systems (e.g. DHT in wide networks, static HT in local networks). Thus the IPFS routing system can be swapped for one that fits users' needs. As long as the interface above is met, the rest of the system will continue to function.
\subsection{Block Exchange - BitSwap Protocol}
+\label{sec:design-exchange}
In IPFS, data distribution happens by exchanging blocks with peers using a
BitTorrent inspired protocol: BitSwap. Like BitTorrent, BitSwap peers are
looking to acquire a set of blocks (\texttt{want\_list}), and have another set
of blocks to offer in exchange (\texttt{have\_list}).
Unlike BitTorrent, BitSwap is not limited to the blocks in one torrent.
-BitSwap operates as a persistent marketplace where node can acquire the
+BitSwap operates as a persistent marketplace where nodes can acquire the
blocks they need, regardless of what files those blocks are part of. The
-blocks could come from completely unrelated files in the filesystem.
+blocks could come from completely unrelated files in the file system.
Nodes come together to barter in the marketplace.
While the notion of a barter system implies a virtual currency could be
created, this would require a global ledger to track ownership
-and transfer of the currency. This can be implemented as a BitSwap Strategy, and will be explored in a future paper.
+and transfer of the currency. This can be implemented as a BitSwap strategy, and will be explored in a future paper.
In the base case, BitSwap nodes have to provide direct value to each other
in the form of blocks. This works fine when the distribution of blocks across
@@ -313,7 +336,7 @@ \subsection{Block Exchange - BitSwap Protocol}
\subsubsection{BitSwap Credit}
The protocol must also incentivize nodes to seed when they do not need
-anything in particular, as they might have the blocks others want. Thus,
+anything in particular, as they might have the blocks that others want. Thus,
BitSwap nodes send blocks to their peers optimistically, expecting the debt to
be repaid. But leeches (free-loading nodes that never share) must be protected against. A simple credit-like system solves the problem:
@@ -324,9 +347,9 @@ \subsubsection{BitSwap Credit}
\end{enumerate}
Note that if a node decides not to send to a peer, the node subsequently
-ignores the peer for an \texttt{ignore\_cooldown} timeout. This prevents
+ignores the peer for an \texttt{ignore\_cooldown} timeout
+(the default for BitSwap is 10 seconds). This prevents
senders from trying to game the probability by just causing more dice-rolls.
-(Default BitSwap is 10 seconds).
\subsubsection{BitSwap Strategy}
@@ -335,7 +358,7 @@ \subsubsection{BitSwap Strategy}
\begin{enumerate}
\item maximize the trade performance for the node, and the whole exchange
\item prevent freeloaders from exploiting and degrading the exchange
- \item be effective with and resistant to other, unknown
+ \item be effective with and resistant to other unknown
strategies
\item be lenient to trusted peers
\end{enumerate}
@@ -373,13 +396,13 @@ \subsubsection{BitSwap Strategy}
\label{fig:psending-graph}
\end{figure}
-As you can see in Figure \ref{fig:psending-graph}, this function drops off quickly as the nodes'
+As you can see in \Cref{fig:psending-graph}, this function drops off quickly as the nodes'
\textit{debt ratio} surpasses twice the established credit.
The \textit{debt ratio} is a measure of trust:
lenient to debts between nodes that have previously exchanged lots of data
successfully, and merciless to unknown, untrusted nodes. This
(a) provides resistance to attackers who would create lots of new nodes
-(sybill attacks),
+(Sybil attacks),
(b) protects previously successful trade relationships, even if one of the
nodes is temporarily unable to provide value, and
(c) eventually chokes relationships that have deteriorated until they
@@ -410,17 +433,19 @@ \subsubsection{BitSwap Strategy}
\subsubsection{BitSwap Ledger}
-BitSwap nodes keep ledgers accounting the transfers with other nodes. This allows nodes to keep track of history and avoid tampering. When activating a connection, BitSwap nodes exchange their ledger information. If it does not match exactly, the ledger is reinitialized from scratch, losing the accrued credit or debt. It is possible for malicious nodes to purposefully ``lose'' the Ledger, hoping to erase debts. It is unlikely that nodes will have accrued enough debt to warrant also losing the accrued trust; however the partner node is free to count it as misconduct, and refuse to trade.
+BitSwap nodes keep ledgers accounting the transfers with other nodes. This allows nodes to keep track of history and avoid tampering. When activating a connection, BitSwap nodes exchange their ledger information. If it does not match exactly, the ledger is reinitialized from scratch, losing the accrued credit or debt. It is possible for malicious nodes to purposefully ``lose'' the ledger, hoping to erase debts. It is unlikely that nodes will have accrued enough debt to warrant also losing the accrued trust; however the partner node is free to count it as misconduct, and refuse to trade.
+\begin{quote}
\begin{verbatim}
- type Ledger struct {
- owner NodeId
- partner NodeId
- bytes_sent int
- bytes_recv int
- timestamp Timestamp
- }
+type Ledger struct {
+ owner NodeId
+ partner NodeId
+ bytes_sent int
+ bytes_recv int
+ timestamp Timestamp
+}
\end{verbatim}
+\end{quote}
Nodes are free to keep the ledger history, though it is not necessary for
correct operation. Only the current ledger entries are useful. Nodes are
@@ -429,54 +454,56 @@ \subsubsection{BitSwap Ledger}
\subsubsection{BitSwap Specification}
-BitSwap nodes follow a simple protocol.
+BitSwap nodes follow a simple protocol:
+\begin{quote}
\begin{verbatim}
- // Additional state kept
- type BitSwap struct {
- ledgers map[NodeId]Ledger
- // Ledgers known to this node, inc inactive
-
- active map[NodeId]Peer
- // currently open connections to other nodes
-
- need_list []Multihash
- // checksums of blocks this node needs
-
- have_list []Multihash
- // checksums of blocks this node has
- }
-
- type Peer struct {
- nodeid NodeId
- ledger Ledger
- // Ledger between the node and this peer
-
- last_seen Timestamp
- // timestamp of last received message
-
- want_list []Multihash
- // checksums of all blocks wanted by peer
- // includes blocks wanted by peer's peers
- }
-
- // Protocol interface:
- interface Peer {
- open (nodeid :NodeId, ledger :Ledger);
- send_want_list (want_list :WantList);
- send_block (block :Block) -> (complete :Bool);
- close (final :Bool);
- }
+// Additional state kept
+type BitSwap struct {
+ ledgers map[NodeId]Ledger
+ // Ledgers known to this node, inc inactive
+
+ active map[NodeId]Peer
+ // currently open connections to other nodes
+
+ want_list []Multihash
+ // checksums of blocks this node wants
+
+ have_list []Multihash
+ // checksums of blocks this node has
+}
+
+type Peer struct {
+ nodeid NodeId
+ ledger Ledger
+ // Ledger between the node and this peer
+
+ last_seen Timestamp
+ // timestamp of last received message
+
+ want_list []Multihash
+ // checksums of all blocks wanted by peer
+ // includes blocks wanted by peer's peers
+}
+
+// Protocol interface:
+interface Peer {
+ open (nodeid :NodeId, ledger :Ledger);
+ send_want_list (want_list :WantList);
+ send_block (block :Block) -> (complete :Bool);
+ close (final :Bool);
+}
\end{verbatim}
+\end{quote}
Sketch of the lifetime of a peer connection:
\begin{enumerate}
- \item Open: peers send \texttt{ledgers} until they agree.
- \item Sending: peers exchange \texttt{want\_lists} and \texttt{blocks}.
+ \item Open: peers send ledgers until they agree.
+ \item Sending: peers exchange want lists and blocks.
\item Close: peers deactivate a connection.
\item Ignored: (special) a peer is ignored (for the duration of a timeout)
- if a node's strategy avoids sending
+ if a node's strategy avoids sending.
\end{enumerate}
@@ -484,16 +511,16 @@ \subsubsection{BitSwap Specification}
When connecting, a node initializes a connection with a
\texttt{Ledger}, either stored from a connection in the past or a new one
-zeroed out. Then, sends an Open message with the \texttt{Ledger} to the peer.
+zeroed out. Then, sends an \texttt{open} message with the \texttt{Ledger} to the peer.
-Upon receiving an \texttt{Open} message, a peer chooses whether to activate
+Upon receiving an \texttt{open} message, a peer chooses whether to activate
the connection. If -- acording to the receiver's \texttt{Ledger} -- the sender
is not a trusted agent (transmission below zero, or large outstanding debt) the
receiver may opt to ignore the request. This should be done probabilistically
with an \texttt{ignore\_cooldown} timeout, as to allow errors to be corrected
and attackers to be thwarted.
-If activating the connection, the receiver initializes a Peer object with the
+If activating the connection, the receiver initializes a \texttt{Peer} object with the
local version of the \texttt{Ledger} and sets the \texttt{last\_seen}
timestamp. Then, it compares the received
\texttt{Ledger} with its own. If they match exactly, the connections have
@@ -519,7 +546,7 @@ \subsubsection{BitSwap Specification}
checksum to verify it matches the expected one, and returns confirmation.
Upon finalizing the correct transmission of a block, the receiver moves the
-block from \texttt{need\_list} to \texttt{have\_list}, and both the receiver
+block from \texttt{want\_list} to \texttt{have\_list}, and both the receiver
and sender update their ledgers to reflect the additional bytes transmitted.
If a transmission verification fails, the sender is either malfunctioning or
@@ -562,11 +589,12 @@ \subsubsection{BitSwap Specification}
% TODO: Rate Limiting / Node Silencing
\subsection{Object Merkle DAG}
+\label{sec:design-objects}
The DHT and BitSwap allow IPFS to form a massive peer-to-peer system for storing and distributing blocks quickly and robustly. On top of these, IPFS builds a Merkle DAG, a directed acyclic graph where links between objects are cryptographic hashes of the targets embedded in the sources. This is a generalization of the Git data structure. Merkle DAGs provide IPFS many useful properties, including:
\begin{enumerate}
- \item \textbf{Content Addressing:} all content is uniquely identified by its
+ \item \textbf{Content addressing:} all content is uniquely identified by its
\texttt{multihash} checksum, \textbf{including links}.
\item \textbf{Tamper resistance:} all content is verified with its checksum.
If data is tampered with or corrupted, IPFS detects it.
@@ -577,31 +605,31 @@ \subsection{Object Merkle DAG}
The IPFS Object format is:
+\begin{quote}
\begin{verbatim}
+type IPFSLink struct {
+ Name string
+ // name or alias of this link
- type IPFSLink struct {
- Name string
- // name or alias of this link
-
- Hash Multihash
- // cryptographic hash of target
+ Hash Multihash
+ // cryptographic hash of target
- Size int
- // total size of target
- }
-
- type IPFSObject struct {
- links []IPFSLink
- // array of links
+ Size int
+ // total size of target
+}
- data []byte
- // opaque content data
- }
+type IPFSObject struct {
+ links []IPFSLink
+ // array of links
+ data []byte
+ // opaque content data
+}
\end{verbatim}
+\end{quote}
-The IPFS Merkle DAG is an extremely flexible way to store data. The only requirements are that object references be (a) content addressed, and (b) encoded in the format above. IPFS grants applications complete control over the data field; applications can use any custom data format they chose, which IPFS may not understand. The separate in-object link table allows IPFS to:
+The IPFS Merkle DAG is an extremely flexible way to store data. The only requirements are that object references be (a) content-addressed, and (b) encoded in the format above. IPFS grants applications complete control over the data field; applications can use any custom data format they chose, which IPFS may not understand. The separate in-object link table allows IPFS to:
\begin{itemize}
@@ -634,7 +662,7 @@ \subsection{Object Merkle DAG}
A raw data field and a common link structure are the necessary components for constructing arbitrary data structures on top of IPFS. While it is easy to see how the Git object model fits on top of this DAG, consider these other potential data structures:
(a) key-value stores
(b) traditional relational databases
-(c) Linked Data triple stores
+(c) linked data triple stores
(d) linked document publishing systems
(e) linked communications platforms
(f) cryptocurrency blockchains.
@@ -642,23 +670,27 @@ \subsection{Object Merkle DAG}
\subsubsection{Paths}
-IPFS objects can be traversed with a string path API. Paths work as they do in traditional UNIX filesystems and the Web. The Merkle DAG links make traversing it easy. Note that full paths in IPFS are of the form:
+IPFS objects can be traversed with a string path API. Paths work as they do in traditional UNIX file systems and the Web. The Merkle DAG links make traversing it easy. Note that full paths in IPFS are of the form:
+\begin{quote}
\begin{verbatim}
- # format
- /ipfs//
+# format
+/ipfs//
- # example
- /ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/foo.txt
+# example
+/ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/foo.txt
\end{verbatim}
+\end{quote}
-The \texttt{/ipfs} prefix allows mounting into existing systems at a standard mount point without conflict (mount point names are of course configurable). The second path component (first within IPFS) is the hash of an object. This is always the case, as there is no global root. A root object would have the impossible task of handling consistency of millions of objects in a distributed (and possibly disconnected) environment. Instead, we simulate the root with content addressing. All objects are always accessible via their hash. Note this means that given three objects in path \texttt{/bar/baz}, the last object is accessible by all:
+The \texttt{/ipfs} prefix allows mounting into existing systems at a standard mount point without conflict (mount point names are of course configurable). The second path component (first within IPFS) is the hash of an object. This is always the case, as there is no global root. A root object would have the impossible task of handling consistency of millions of objects in a distributed (and possibly disconnected) environment. Instead, we simulate the root with content addressing. All objects are always accessible via their hash. Note that this means that given three objects in path \texttt{/bar/baz}, the last object is accessible by all:
+\begin{quote}
\begin{verbatim}
- /ipfs//bar/baz
- /ipfs//baz
- /ipfs/
+/ipfs//bar/baz
+/ipfs//baz
+/ipfs/
\end{verbatim}
+\end{quote}
\subsubsection{Local Objects}
@@ -666,7 +698,7 @@ \subsubsection{Local Objects}
on which to store and retrieve local raw data for the objects IPFS manages.
The type of storage depends on the node's use case.
In most cases, this is simply a portion of disk space (either managed by
-the native filesystem, by a key-value store such as leveldb~\cite{dean11}, or
+the native file system, by a key-value store such as leveldb~\cite{dean11}, or
directly by the IPFS client). In others, for example non-persistent caches,
this storage is just a portion of RAM.
@@ -694,33 +726,36 @@ \subsubsection{Object-level Cryptography}
IPFS is equipped to handle object-level cryptographic operations. An encrypted or signed object is wrapped in a special frame that allows encryption or verification of the raw bytes.
+\begin{quote}
\begin{verbatim}
- type EncryptedObject struct {
- Object []bytes
- // raw object data encrypted
+type EncryptedObject struct {
+ Object []bytes
+ // raw object data encrypted
- Tag []bytes
- // optional tag for encryption groups
- }
+ Tag []bytes
+ // optional tag for encryption groups
+}
- type SignedObject struct {
- Object []bytes
- // raw object data signed
+type SignedObject struct {
+ Object []bytes
+ // raw object data signed
- Signature []bytes
- // hmac signature
+ Signature []bytes
+ // hmac signature
- PublicKey []multihash
- // multihash identifying key
- }
+ PublicKey []multihash
+ // multihash identifying key
+}
\end{verbatim}
+\end{quote}
Cryptographic operations change the object's hash, defining a different object. IPFS automatically verifies signatures, and can decrypt data with user-specified keychains. Links of encrypted objects are protected as well, making traversal impossible without a decryption key. It is possible to have a parent object encrypted under one key, and a child under another or not at all. This secures links to shared objects.
\subsection{Files}
+\label{sec:design-files}
-IPFS also defines a set of objects for modeling a versioned filesystem on top of the Merkle DAG. This object model is similar to Git's:
+IPFS also defines a set of objects for modeling a versioned file system on top of the Merkle DAG. This object model is similar to Git's:
\begin{enumerate}
\item \texttt{block}: a variable-size block of data.
@@ -729,30 +764,35 @@ \subsection{Files}
\item \texttt{commit}: a snapshot in the version history of a tree.
\end{enumerate}
-I hoped to use the Git object formats exactly, but had to depart to introduce certain features useful in a distributed filesystem, namely (a) fast size lookups (aggregate byte sizes have been added to objects), (b) large file deduplication (adding a \texttt{list} object), and (c) embedding of \texttt{commits} into \texttt{trees}. However, IPFS File objects are close enough to Git that conversion between the two is possible. Also, a set of Git objects can be introduced to convert without losing any information (unix file permissions, etc).
+I hoped to use the Git object formats exactly, but had to depart to introduce certain features useful in a distributed file system, namely (a) fast size lookups (aggregate byte sizes have been added to objects), (b) large file deduplication (adding a \texttt{list} object), and (c) embedding of \texttt{commits} into \texttt{trees}. However, IPFS File objects are close enough to Git that conversion between the two is possible. Also, a set of Git objects can be introduced to convert without losing any information (UNIX file permissions, etc).
+
+Notation: File object formats below use JSON. Note that this structure is actually binary encoded using Protocol Buffers, though IPFS includes import/export to JSON.
-Notation: File object formats below use JSON. Note that this structure is actually binary encoded using protobufs, though ipfs includes import/export to JSON.
+%% The schema of the examples below has changed and is obsolete. (ivilata)
\subsubsection{File Object: \texttt{blob}}
The \texttt{blob} object contains an addressable unit of data, and
-represents a file. IPFS Blocks are like Git blobs or filesystem data blocks. They store the users' data. Note that IPFS files can be represented by both \texttt{lists} and \texttt{blobs}. Blobs have no links.
+represents a file. IPFS Blocks are like Git blobs or file system data blocks. They store the users' data. Note that IPFS files can be represented by both \texttt{lists} and \texttt{blobs}. Blobs have no links.
+\begin{quote}
\begin{verbatim}
{
"data": "some data here"
// blobs have no links
}
\end{verbatim}
+\end{quote}
\subsubsection{File Object: \texttt{list}}
The \texttt{list} object represents a large or deduplicated file made up of
several IPFS \texttt{blobs} concatenated together. \texttt{lists} contain
an ordered sequence of \texttt{blob} or \texttt{list} objects.
-In a sense, the IPFS \texttt{list} functions like a filesystem file with
+In a sense, the IPFS \texttt{list} functions like a file system file with
indirect blocks. Since \texttt{lists} can contain other \texttt{lists}, topologies including linked lists and balanced trees are possible. Directed graphs where the same node appears in multiple places allow in-file deduplication. Of course, cycles are not possible, as enforced by hash addressing.
+\begin{quote}
\begin{verbatim}
{
"data": ["blob", "list", "blob"],
@@ -768,6 +808,7 @@ \subsubsection{File Object: \texttt{list}}
]
}
\end{verbatim}
+\end{quote}
\begin{figure}
@@ -812,41 +853,41 @@ \subsubsection{File Object: \texttt{list}}
\caption{Sample Object Graph} \label{fig:sample-object-graph}
\begin{verbatim}
- > ipfs file-cat --json
- {
- "data": {
- "type": "tree",
- "date": "2014-09-20 12:44:06Z",
- "message": "This is a commit message."
- },
- "links": [
- { "hash": "",
- "name": "parent", "size": 25309 },
- { "hash": "",
- "name": "object", "size": 5198 },
- { "hash": "",
- "name": "author", "size": 109 }
- ]
- }
-
- > ipfs file-cat --json
- {
- "data": nil,
- "links": [
- { "hash": "",
- "name": "ttt222-name", "size": 1234 },
- { "hash": "",
- "name": "ttt333-name", "size": 3456 },
- { "hash": "",
- "name": "bbb222-name", "size": 22 }
- ]
- }
-
- > ipfs file-cat --json
- {
- "data": "blob222 data",
- "links": []
- }
+> ipfs file-cat --json
+{
+ "data": {
+ "type": "tree",
+ "date": "2014-09-20 12:44:06Z",
+ "message": "This is a commit message."
+ },
+ "links": [
+ { "hash": "",
+ "name": "parent", "size": 25309 },
+ { "hash": "",
+ "name": "object", "size": 5198 },
+ { "hash": "",
+ "name": "author", "size": 109 }
+ ]
+}
+
+> ipfs file-cat --json
+{
+ "data": nil,
+ "links": [
+ { "hash": "",
+ "name": "ttt222-name", "size": 1234 },
+ { "hash": "",
+ "name": "ttt333-name", "size": 3456 },
+ { "hash": "",
+ "name": "bbb222-name", "size": 22 }
+ ]
+}
+
+> ipfs file-cat --json
+{
+ "data": "blob222 data",
+ "links": []
+}
\end{verbatim}
\caption{Sample Objects} \label{fig:sample-objects}
\end{figure}
@@ -857,6 +898,7 @@ \subsubsection{File Object: \texttt{tree}}
The \texttt{tree} object in IPFS is similar to Git's: it represents a
directory, a map of names to hashes. The hashes reference \texttt{blobs}, \texttt{lists}, other \texttt{trees}, or \texttt{commits}. Note that traditional path naming is already implemented by the Merkle DAG.
+\begin{quote}
\begin{verbatim}
{
"data": nil,
@@ -872,12 +914,14 @@ \subsubsection{File Object: \texttt{tree}}
]
}
\end{verbatim}
+\end{quote}
\subsubsection{File Object: \texttt{commit}}
The \texttt{commit} object in IPFS represents a snapshot in the version history of any object. It is similar to Git's, but can reference any type of object. It also links to author objects.
+\begin{quote}
\begin{verbatim}
{
"data": {
@@ -895,30 +939,33 @@ \subsubsection{File Object: \texttt{commit}}
]
}
\end{verbatim}
+\end{quote}
\subsubsection{Version control}
The \texttt{commit} object represents a particular snapshot in the version
history of an object. Comparing the objects (and children) of two
different commits reveals the differences between two versions of the
-filesystem. As long as a single \texttt{commit} and all the children objects
+file system. As long as a single \texttt{commit} and all the children objects
it references are accessible, all preceding versions are retrievable and the
-full history of the filesystem changes can be accessed. This falls out
+full history of the file system changes can be accessed. This falls out
of the Merkle DAG object model.
-The full power of the Git version control tools is available to IPFS users. The object model is compatible, though not the same. It is possible to (a) build a version of the Git tools modified to use the IPFS object graph, (b) build a mounted FUSE filesystem that mounts an IPFS \texttt{tree} as a Git repo, translating Git filesystem read/writes to the IPFS formats.
+The full power of the Git version control tools is available to IPFS users. The object model is compatible, though not the same. It is possible to (a) build a version of the Git tools modified to use the IPFS object graph, (b) build a mounted FUSE file system that mounts an IPFS \texttt{tree} as a Git repo, translating Git file system read/writes to the IPFS formats.
+
+%% Does that really allow writing? (ivilata)
-\subsubsection{Filesystem Paths}
+\subsubsection{File System Paths}
-As we saw in the Merkle DAG section, IPFS objects can be traversed with a string path API. The IPFS File Objects are designed to make mounting IPFS onto a UNIX filesystem simpler. They restrict \texttt{trees} to have no data, in order to represent them as directories. And \texttt{commits} can either be represented as directories or hidden from the filesystem entirely.
+As we saw in the Merkle DAG section, IPFS objects can be traversed with a string path API. The IPFS File Objects are designed to make mounting IPFS onto a UNIX file system simpler. They restrict \texttt{trees} to have no data, in order to represent them as directories. The \texttt{commits} can either be represented as directories or hidden from the file system entirely.
\subsubsection{Splitting Files into Lists and Blob}
One of the main challenges with versioning and distributing large files is finding the right way to split them into independent blocks. Rather than assume it can make the right decision for every type of file, IPFS offers the following alternatives:
\begin{enumerate}
- \item[(a)] Use Rabin Fingerprints \cite{RabinFingerprints} as in LBFS \cite{LBFS} to pick suitable block boundaries.
+ \item[(a)] Use Rabin fingerprints \cite{RabinFingerprints} as in LBFS \cite{LBFS} to pick suitable block boundaries.
\item[(b)] Use the rsync \cite{rsync} rolling-checksum algorithm, to detect blocks that have changed between versions.
\item[(c)] Allow users to specify block-splitting functions highly tuned for specific files.
\end{enumerate}
@@ -941,8 +988,9 @@ \subsubsection{Path Lookup Performance}
would really be paths parting from the original tree, with slashes.
\end{itemize}
-For example, \texttt{flattened tree} for \texttt{ttt111} above:
+For example, the \texttt{flattened tree} for \texttt{ttt111} in \Cref{fig:sample-object-graph}:
+\begin{quote}
\begin{verbatim}
{
"data":
@@ -962,25 +1010,27 @@ \subsubsection{Path Lookup Performance}
"name": "bbb222-name" }
] }
\end{verbatim}
+\end{quote}
\subsection{IPNS: Naming and Mutable State}
+\label{sec:design-ipns}
So far, the IPFS stack forms a peer-to-peer block exchange constructing a content-addressed DAG of objects. It serves to publish and retrieve immutable objects. It can even track the version history of these objects. However, there is a critical component missing: mutable naming. Without it, all communication of new content must happen off-band, sending IPFS links. What is required is some way to retrieve mutable state at \textit{the same path}.
It is worth stating why -- if mutable data is necessary in the end -- we worked hard to build up an \textit{immutable} Merkle DAG. Consider the properties of IPFS that fall out of the Merkle DAG: objects can be (a) retrieved via their hash, (b) integrity checked, (c) linked to others, and (d) cached indefinitely. In a sense:
\begin{center}
- Objects are \textbf{permanent}
+ Objects are \textbf{permanent}.
\end{center}
-\noindent These are the critical properties of a high-performance distributed system, where data is expensive to move across network links. Object content addressing constructs a web with (a) significant bandwidth optimizations, (b) untrusted content serving, (c) permanent links, and (d) the ability to make full permanent backups of any object and its references.
+\noindent These are the critical properties of a high-performance distributed system, where data is expensive to move across network links. Object content addressing constructs a Web with (a) significant bandwidth optimizations, (b) untrusted content serving, (c) permanent links, and (d) the ability to make full permanent backups of any object and its references.
-The Merkle DAG, immutable content-addressed objects, and Naming, mutable pointers to the Merkle DAG, instantiate a dichotomy present in many successful distributed systems. These include the Git Version Control System, with its immutable objects and mutable references; and Plan9 \cite{Plan9}, the distributed successor to UNIX, with its mutable Fossil \cite{Fossil} and immutable Venti \cite{Venti} filesystems. LBFS \cite{LBFS} also uses mutable indices and immutable chunks.
+The Merkle DAG (immutable content-addressed objects) and Naming (mutable pointers to the Merkle DAG) instantiate a dichotomy present in many successful distributed systems. These include the Git Version Control System, with its immutable objects and mutable references; and Plan9 \cite{Plan9}, the distributed successor to UNIX, with its mutable Fossil \cite{Fossil} and immutable Venti \cite{Venti} file systems. LBFS \cite{LBFS} also uses mutable indices and immutable chunks.
\subsubsection{Self-Certified Names}
-Using the naming scheme from SFS~\cite{mazieres98, mazieres00} gives us a way to construct self-certified names, in a cryptographically assigned global namespace, that are mutable. The IPFS scheme is as follows.
+Using the naming scheme from SFS~\cite{mazieres98, mazieres00} gives us a way to construct self-certified names (in a cryptographically assigned global namespace) that are mutable. The IPFS scheme is as follows.
\begin{enumerate}
\item Recall that in IPFS:
@@ -1001,7 +1051,7 @@ \subsubsection{Self-Certified Names}
/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/
\end{verbatim}
- \item When other users retrieve the object, they can check the signature matches the public key and NodeId. This verifies the authenticity of the Object published by the user, achieving mutable state retrival.
+ \item When other users retrieve the object, they can check the signature matches the public key and NodeId. This verifies the authenticity of the Object published by the user, achieving mutable state retrieval.
\end{enumerate}
@@ -1017,7 +1067,6 @@ \subsubsection{Self-Certified Names}
\end{verbatim}
\item Any links in the Object published act as sub-names in the namespace:
-\end{itemize}
\begin{verbatim}
/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/
@@ -1025,12 +1074,12 @@ \subsubsection{Self-Certified Names}
/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/docs/ipfs
\end{verbatim}
-\begin{itemize}
- \item it is advised to publish a \texttt{commit} object, or some other object with a version history, so that clients may be able to find old names. This is left as a user option, as it is not always desired.
+ \item It is advised to publish a \texttt{commit} object, or some other object with a version history, so that clients may be able to find old names. This is left as a user option, as it is not always desired.
\end{itemize}
-Note that when users publish this Object, it cannot be published in the same way
+%% Incomplete (#1). (ivilata)
+% Note that when users publish this Object, it cannot be published in the same way
\subsubsection{Human Friendly Names}
@@ -1040,6 +1089,7 @@ \subsubsection{Human Friendly Names}
As encouraged by SFS, users can link other users' Objects directly into their own Objects (namespace, home, etc). This has the benefit of also creating a web of trust (and supports the old Certificate Authority model):
+\begin{quote}
\begin{verbatim}
# Alice links to bob Bob
ipfs link //friends/bob /
@@ -1053,6 +1103,7 @@ \subsubsection{Human Friendly Names}
# access Verisign certified domains
//foo.com
\end{verbatim}
+\end{quote}
\paragraph{DNS TXT IPNS Records}
@@ -1061,55 +1112,63 @@ \subsubsection{Human Friendly Names}
looks up key \texttt{ipns} in its \texttt{DNS TXT} records. IPFS
interprets the value as either an object hash or another IPNS path:
+%% The specification used here is obsolete. (ivilata)
+
+\begin{quote}
\begin{verbatim}
- # this DNS TXT record
- ipfs.benet.ai. TXT "ipfs=XLF2ipQ4jD3U ..."
+# this DNS TXT record
+ipfs.benet.ai. TXT "ipfs=XLF2ipQ4jD3U ..."
- # behaves as symlink
- ln -s /ipns/XLF2ipQ4jD3U /ipns/fs.benet.ai
+# behaves as symlink
+ln -s /ipns/XLF2ipQ4jD3U /ipns/fs.benet.ai
\end{verbatim}
+\end{quote}
\paragraph{Proquint Pronounceable Identifiers}
There have always been schemes to encode binary into pronounceable words. IPNS supports Proquint \cite{Proquint}. Thus:
+\begin{quote}
\begin{verbatim}
- # this proquint phrase
- /ipns/dahih-dolij-sozuk-vosah-luvar-fuluh
+# this proquint phrase
+/ipns/dahih-dolij-sozuk-vosah-luvar-fuluh
- # will resolve to corresponding
- /ipns/KhAwNprxYVxKqpDZ
+# will resolve to corresponding
+/ipns/KhAwNprxYVxKqpDZ
\end{verbatim}
+\end{quote}
\paragraph{Name Shortening Services}
Services are bound to spring up that will provide name shortening as a service, offering up their namespaces to users. This is similar to what we see today with DNS and Web URLs:
+\begin{quote}
\begin{verbatim}
- # User can get a link from
- /ipns/shorten.er/foobar
+# User can get a link from
+/ipns/shorten.er/foobar
- # To her own namespace
- /ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm
+# To her own namespace
+/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm
\end{verbatim}
+\end{quote}
\subsection{Using IPFS}
IPFS is designed to be used in a number of different ways. Here are just some of the usecases I will be pursuing:
\begin{enumerate}
- \item As a mounted global filesystem, under \texttt{/ipfs} and \texttt{/ipns}.
+ \item As a mounted global file system, under \texttt{/ipfs} and \texttt{/ipns}.
\item As a mounted personal sync folder that automatically versions, publishes, and backs up any writes.
\item As an encrypted file or data sharing system.
\item As a versioned package manager for \textit{all} software.
- \item As the root filesystem of a Virtual Machine.
- \item As the boot filesystem of a VM (under a hypervisor).
+ \item As the root file system of a Virtual Machine.
+ \item As the boot file system of a VM (under a hypervisor).
\item As a database: applications can write directly to the Merkle DAG data model and get all the versioning, caching, and distribution IPFS provides.
\item As a linked (and encrypted) communications platform.
\item As an integrity checked CDN for large files (without SSL).
\item As an encrypted CDN.
- \item On webpages, as a web CDN.
+ \item On webpages, as a Web CDN.
\item As a new Permanent Web where links do not die.
\end{enumerate}
@@ -1117,7 +1176,7 @@ \subsection{Using IPFS}
\begin{enumerate}
\item[(a)] an IPFS library to import in your own applications.
- \item[(b)] commandline tools to manipulate objects directly.
+ \item[(b)] command line tools to manipulate objects directly.
\item[(c)] mounted file systems, using FUSE \cite{FUSE} or as kernel modules.
\end{enumerate}
@@ -1127,17 +1186,16 @@ \section{The Future}
The ideas behind IPFS are the product of decades of successful distributed systems research in academia and open source. IPFS synthesizes many of the best ideas from the most successful systems to date. Aside from BitSwap, which is a novel protocol, the main contribution of IPFS is this coupling of systems and synthesis of designs.
-IPFS is an ambitious vision of new decentralized Internet infrastructure, upon which many different kinds of applications can be built. At the bare minimum, it can be used as a global, mounted, versioned filesystem and namespace, or as the next generation file sharing system. At its best, it could push the web to new horizons, where publishing valuable information does not impose hosting it on the publisher but upon those interested, where users can trust the content they receive without trusting the peers they receive it from, and where old but important files do not go missing. IPFS looks forward to bringing us toward the Permanent Web.
+IPFS is an ambitious vision of new decentralized Internet infrastructure, upon which many different kinds of applications can be built. At the bare minimum, it can be used as a global, mounted, versioned file system and namespace, or as the next generation file sharing system. At its best, it could push the Web to new horizons, where publishing valuable information does not impose hosting it on the publisher but upon those interested, where users can trust the content they receive without trusting the peers they receive it from, and where old but important files do not go missing. IPFS looks forward to bringing us toward the Permanent Web.
\section{Acknowledgments}
-IPFS is the synthesis of many great ideas and systems. It would be impossible to dare such ambitious goals without standing on the shoulders of such giants. Personal thanks to David Dalrymple, Joe Zimmerman, and Ali Yahya for long discussions on many of these ideas, in particular: exposing the general Merkle DAG (David, Joe), rolling hash blocking (David), and s/kademlia sybill protection (David, Ali). And special thanks to David Mazieres, for his ever brilliant ideas.
+IPFS is the synthesis of many great ideas and systems. It would be impossible to dare such ambitious goals without standing on the shoulders of such giants. Personal thanks to David Dalrymple, Joe Zimmerman, and Ali Yahya for long discussions on many of these ideas, in particular: exposing the general Merkle DAG (David, Joe), rolling hash blocking (David), and S/Kademlia Sybil protection (David, Ali). And special thanks to David Mazieres, for his ever brilliant ideas.
\section{References TODO}
-\bibliographystyle{abbrv}
-\bibliography{ipfs-cap2pfs}
+\printbibliography
%\balancecolumns
%\subsection{References}
\end{document}
diff --git a/ipfs-cap2pfs/ipfs-p2p-file-system.pdf b/ipfs-cap2pfs/ipfs-p2p-file-system.pdf
index eda0b8c..cabd031 100644
Binary files a/ipfs-cap2pfs/ipfs-p2p-file-system.pdf and b/ipfs-cap2pfs/ipfs-p2p-file-system.pdf differ