forked from ethersphere/swarm-docs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
70 changed files
with
4,264 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,243 @@ | ||
|
||
\subsection{Data Retrieval} | ||
\blockslide{\textbf{Data out}}{How to retrieve data stored in the swarm.} | ||
|
||
|
||
\begin{frame}{Data Retrieval} | ||
\begin{columns}[T] | ||
\begin{column}{0.4\textwidth} | ||
\small | ||
\alt<1-3>{}{\tiny}{ | ||
Everything on the swarm network has an \textbf<1-3>{id}, every chunk of data, every node (even you!). The \textbf<1-3>{id} also functions as an \textbf<1-3>{address}.\\[5mm] | ||
} | ||
\uncover<4->{\alt<4-5>{\small}{\tiny} | ||
When your swarm-enabled dapp wishes to retrieve ``awesome-swarm-slides.pdf'',} | ||
\uncover<5->{\alt<5>{}{\tiny}{it will attempt to retrieve it via its id ``\textbf{H}''.\\[5mm] | ||
}} | ||
\uncover<6->{\alt<6>{\small}{\tiny} | ||
{ | ||
In swarm, the content with address ``\textbf{H}'' is stored with the node whose own address is \emph{closest} to \textbf{H}.\\[5mm] | ||
}} | ||
\uncover<7->{\alt<7>{\small}{\tiny} | ||
{ | ||
Swarm's \textbf<7>{Retrieval Process} is responsible for deliviering the data to you. | ||
}} | ||
\end{column} | ||
|
||
\begin{column}{0.6\textwidth} | ||
\begin{tikzpicture} | ||
\node[scale=0.7]{ | ||
\begin{tikzpicture} | ||
\node[visible on=<2->] at (2,2) {\textbf{The Swarm Network:}}; | ||
|
||
\node[node,visible on=<2->] at (0,0) {}; | ||
\node[node,visible on=<2->] at (1,-0.9) {}; | ||
\node[node,visible on=<2->] at (0.5,-3) {}; | ||
\node[node,visible on=<2->] at (0,-6.3) {}; | ||
\node[node,visible on=<2->] at (5.8,-1.2) {}; | ||
\node[node,visible on=<2->] at (4,-5.9) {}; | ||
\node[node,visible on=<2->] at (4.1,-3) {}; | ||
\node[node,visible on=<2->] at (2.1,-2) {}; | ||
|
||
\node[node,visible on=<2>] at (4,0) (younode) {swarm-node}; | ||
\node[peer,visible on=<3->] at (4,0) (you) {You}; | ||
|
||
\node[visible on=<5->] (chunk) at (1,-5) {$\bullet$}; | ||
\node[visible on=<5->] (chunklabel) at (2,-4.5) {H} edge[point,->,visible on =<5->] (chunk); | ||
|
||
\node[visible on=<2-6>, node] at (-0.5,-4.2) (close) {}; | ||
\node[visible on=<7->, peer] at (-0.5,-4.2) (closestnode) {Closest Node}; | ||
\node[visible on=<7->] at (-0.5, -5.5) (hlabel) {Look for ``H'' here} | ||
edge[visible on=<7->,point,->] (closestnode); | ||
\end{tikzpicture} | ||
}; | ||
\end{tikzpicture} | ||
\end{column} | ||
\end{columns} | ||
|
||
\end{frame} | ||
|
||
|
||
|
||
|
||
|
||
|
||
\begin{frame}{Swarm Retrieval Process} | ||
|
||
\begin{tikzpicture} | ||
\node[peer,visible on=<1->] at (12,0) (retriever){Retriever}; | ||
\node[visible on=<13>,scale=2] at (12,-1.5) {\Smiley}; | ||
|
||
\node[visible on=<2->] (chunk) at (4,-5) {$\bullet$}; | ||
\node[visible on=<2->] (chunklabel) at (3,-4) {data address} edge[point,->,visible on =<2->] (chunk); | ||
|
||
\node[peer,visible on=<4-12>, dimmed on=<13->] at (8.5,-0.5) (connectedpeer){peer} | ||
(retriever.-150) edge[point, ->,visible on=<5>,dimmed on=<6-12>, bend left=15] | ||
node[below=2pt,visible on=<5>, dimmed on=<6-12>] {request} | ||
(connectedpeer.-10); | ||
|
||
\node[node,visible on=<6-11>, dimmed on=<12->] at (6,-2) (firstnode){some node} | ||
(connectedpeer.-70) edge[point,->,visible on=<6>, dimmed on=<7-11>,bend left=30] | ||
node[right of=2pt,visible on=<6>, dimmed on=<7-11>] {request} | ||
(firstnode.east); | ||
|
||
\node[node,visible on=<7-10>, dimmed on=<11->] at (7.5,-4.5) (secondnode){other node} | ||
(firstnode.-70) edge[point,->,dashed,visible on=<7>, dimmed on=<8-10>,bend left=10] | ||
node[right of=2pt,visible on=<7>, dimmed on=<8-10>] {requests...} | ||
(secondnode.120); | ||
|
||
\node[peer,visible on=<3-9>, dimmed on=<10->] at (4,-6) (closestnode){closest node} | ||
(secondnode.-110) edge[point,->,visible on=<8>, dimmed on=<9>,out=-110,in=0] | ||
node[right of=2pt,visible on=<8>, dimmed on=<9>] {request} | ||
(closestnode.east) | ||
(closestnode) edge[thick,point,->,visible on=<9>] node[above=2pt,visible on=<9>]{deliver} (secondnode) | ||
(secondnode.north west) edge[thick, point,->,visible on=<10>, dashed] node[left of=2pt,visible on=<10>]{deliveries} (firstnode.-120) | ||
(firstnode.55) edge[thick,point,->,visible on=<11>] node[left of=2pt,visible on=<11>]{deliver} (connectedpeer.-150) | ||
(connectedpeer) edge[thick,point,->,visible on=<12>] node[above=2pt,visible on=<12>]{deliver} (retriever) | ||
; | ||
|
||
\node[chunk, scale=0.6,visible on=<3->, below=3pt of closestnode.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<9->, below=3pt of secondnode.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<10->, below=3pt of firstnode.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<11->, below=3pt of connectedpeer.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<12->, below=3pt of retriever.-50] {}; | ||
\end{tikzpicture} | ||
\end{frame} | ||
|
||
|
||
|
||
|
||
\subsection[SWAP]{Paying for data} | ||
\wholeslide{SWAP: \textbf{Sw}arm \textbf{A}ccounting \textbf{P}rotocol} | ||
|
||
\begin{frame}{SWAP: Swarm Accounting Protocol} | ||
\begin{columns}[T] | ||
\begin{column}{0.5\textwidth} | ||
\small | ||
The \textbf{Swarm Accounting Protocol} keeps track of all data retrieved via the swarm retrieval process. It is used to facilitate automated payments between peers for the bandwidth they provide.\\ | ||
\uncover<2->{Note: Bandwidth accounting \alt<2>{\alert{has to be}}{is} per-peer.\\[5mm]} | ||
|
||
\uncover<9->{When the peer connection becomes too imbalanced, a \emph{payment} is initiated.} | ||
\end{column} | ||
|
||
\begin{column}{0.5\textwidth} | ||
\begin{center} | ||
\begin{tikzpicture} | ||
\node[peer,visible on=<3->] at (-2,0) (node1) {Me}; | ||
\node[peer,visible on=<4->] at (2,0) (node2) {Peer} | ||
(node1.50) edge[point,->,dashed,visible on=<5->,bend right=30,out=50,in=130] node[below=10pt,visible on=<7->,scale=0.8] (sup){data delivered} (node2.130) | ||
(node2.-130) edge[point,->,dashed,visible on=<6->,bend left=30,in=130,out=50] node[above=10pt,visible on=<9->,scale=0.8]{data received} (node1.-50) | ||
; | ||
\node[visible on=<8->,below= 2mm of sup]{\Large{-}}; | ||
\end{tikzpicture} | ||
\end{center} | ||
\end{column} | ||
|
||
\end{columns} | ||
\end{frame} | ||
|
||
\begin{frame}{The chequebook and the channel} | ||
\begin{itemize} | ||
\item It is \emph{impossible} to pay for every chunk of data delivered. | ||
\item<2-> Even batch payments would constitute unacceptable blockchain bloat (and transaction cost). | ||
\end{itemize} | ||
\uncover<3->{Instead of processing every payment on-chain, SWAP employs a \emph{chequebook} smart contract:} | ||
\begin{itemize} | ||
\item<4-> Cheques are passed between connected swarm nodes (peers) off-chain. | ||
\item<4-> Peers can cash in (process on-chain) the received cheques at any time. | ||
\item<4-> Issued cheques are \emph{cumulative} and \textbf{only the last cheque has to be cashed}. | ||
\end{itemize} | ||
\uncover<5>{SWAP will soon also be usable via \emph{payment channels} (Raiden).} | ||
\end{frame} | ||
|
||
\begin{frame}{The chequebook and the channel} | ||
\begin{overlayarea}{\textwidth}{5.2cm} | ||
\setbeamercovered{transparent}% Dim out "inactive" elements | ||
\begin{columns}[t] | ||
\column{0.5\textwidth} | ||
\begin{block}{Chequebook} | ||
\textbf{Pro:} | ||
\begin{enumerate} | ||
\item<1>{Offchain payments} | ||
\item<2>{Low barrier to entry (pay anyone)} | ||
\end{enumerate} | ||
\textbf{Con:} | ||
\begin{enumerate} | ||
\item<3>{Cheques can bounce (payment not guaranteed)} | ||
\end{enumerate} | ||
\end{block} | ||
\column{0.5\textwidth} | ||
\begin{block}{Channel} | ||
\textbf{Pro:} | ||
\begin{enumerate} | ||
\item<1>{Offchain payments} | ||
\item<3>{Secure - payments guaranteed} | ||
\end{enumerate} | ||
\textbf{Con:} | ||
\begin{enumerate} | ||
\item<2>{High barrier to entry (must first join channel network)} | ||
\end{enumerate} | ||
\end{block} | ||
\end{columns} | ||
\end{overlayarea} | ||
\uncover<4>{ | ||
Regardless of \emph{how} payments are processed, SWAP demonstrates how a swarm can have \textbf{programmable incentives}. In particular, a network of profit-maximising nodes using SWAP results in an automatically scaling content delivery network. | ||
} | ||
\end{frame} | ||
|
||
|
||
\begin{frame}{Swarm CDN is auto-scaling} | ||
\begin{tikzpicture} | ||
\node[peer,visible on=<1->] at (12,0) (retriever){}; | ||
|
||
\node[visible on=<1->] (chunk) at (4,-5) {$\bullet$}; | ||
\node[visible on=<1->] (chunklabel) at (3,-4) {data address} edge[point,->,visible on =<1->] (chunk); | ||
|
||
\node[node,visible on=<2->,] at (8.5,-0.5) (connectedpeer){} | ||
(retriever.-150) edge[point, ->,visible on=<4-8>, bend left=15] | ||
node[below=2pt,visible on=<4>] {request} | ||
(connectedpeer.-10); | ||
|
||
\node[node,visible on=<2->] at (6,-2) (firstnode){} | ||
(connectedpeer.-70) edge[point,->,visible on=<4-7>,bend left=30] | ||
node[right of=2pt,visible on=<4>] {request} | ||
(firstnode.east); | ||
|
||
\node[node,visible on=<2->] at (7.5,-4.5) (secondnode){} | ||
(firstnode.-70) edge[point,->,dashed,visible on=<4-6>,bend left=10] | ||
node[right of=2pt,visible on=<4>] {requests...} | ||
(secondnode.120); | ||
|
||
\node[peer,visible on=<2->] at (4,-6) (closestnode){} | ||
(secondnode.-110) edge[point,->,visible on=<4-5>,out=-110,in=0] | ||
node[right of=2pt,visible on=<4>] {request} | ||
(closestnode.east) | ||
(closestnode) edge[thick,point,->,visible on=<5>] (secondnode) | ||
(secondnode.north west) edge[thick, point,->,visible on=<6>, dashed] (firstnode.-120) | ||
(firstnode.55) edge[thick,point,->,visible on=<7>] (connectedpeer.-150) | ||
(connectedpeer) edge[thick,point,->,visible on=<8>] (retriever) | ||
; | ||
|
||
\node[chunk, scale=0.6,visible on=<3->, below=3pt of closestnode.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<5->, below=3pt of secondnode.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<6-9>, below=3pt of firstnode.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<7-9>, below=3pt of connectedpeer.-50] {}; | ||
\node[chunk, scale=0.6,visible on=<8->, below=3pt of retriever.-50] {}; | ||
|
||
|
||
\node[peer, visible on=<11->] at (12,-6) (newguy){}; | ||
\node[node, visible on=<11->] at (11,-4) (newnode){} | ||
(newguy) edge[point,->,visible on=<12-15>,dashed,bend left=20] (newnode) | ||
(newnode) edge[point,->,visible on=<13-14>,bend left=20] (secondnode) | ||
; | ||
|
||
\node[chunk, scale=0.6,visible on=<14->, below=3pt of newnode.-50] {} | ||
(secondnode) edge[thick,point,->,visible on=<14>] (newnode); | ||
\node[chunk, scale=0.6,visible on=<15->, below=3pt of newguy.-50] {} | ||
(newnode) edge[thick,point,->,visible on=<15>] (newguy); | ||
|
||
\node[visible on=<16>,scale=4] at (3,-1) {\Smiley}; | ||
|
||
\end{tikzpicture} | ||
\end{frame} | ||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.