presentation.tex (10691B)
1 \documentclass[aspectratio=169]{beamer} 2 \usepackage{tikz} 3 \usepackage{ragged2e} 4 5 \apptocmd{\frame}{}{\justifying}{} 6 7 \usetikzlibrary{positioning,fit,patterns} 8 9 \title{Depolymerization} 10 \subtitle{Integrating GNU Taler with blockchain-based cryptocurrencies} 11 \author{ Antoine d'Aligny \and Emmanuel Benoist \and Christian Grothoff} 12 \institute{Bern University of Applied Sciences} 13 \date{\today} 14 \titlegraphic{\includegraphics[width=2.5cm]{../docs/media/taler.png}} 15 16 17 \begin{document} 18 19 \begin{frame} 20 \titlepage 21 \end{frame} 22 23 \begin{frame}{GNU Taler}{Overview} 24 \begin{tikzpicture}[remember picture,overlay] 25 \node (N1)[above right=22mm and 56mm of current page.center] {\includegraphics[width=18mm]{./google_play_GNU_Taler.jpg}}; 26 \node [below=-2mm of N1]{wallet.taler.net}; 27 \end{tikzpicture} 28 \begin{columns} 29 \column{0.5\textwidth} 30 \begin{tikzpicture}[ 31 rect/.style={circle, draw=black}, 32 sym/.style={-stealth, shorten >= 2pt, shorten <= 2pt} 33 ] 34 % Taler payment system 35 \node[rect](1) {Exchange}; 36 \node[rect,below left=1.5cm and 0.7cm of 1](2) {Customer}; 37 \node[rect,below right=1.5cm and 0.7cm of 1](3) {Merchant}; 38 39 \draw[sym] (1) -- node [midway, above, sloped] {\tiny Withdraw coins} (2); 40 \draw[sym] (2) -- node [midway, above, sloped] {\tiny Spend coins} (3); 41 \draw[sym] (3) -- node [midway, above, sloped] {\tiny Deposit coins} (1); 42 43 % Settlement layer 44 \node[left=2cm of 1](E1){}; 45 \node[right=2cm of 1](E2){}; 46 \draw[sym] (E1) -- node [midway, above] {\tiny Deposit money} (1); 47 \draw[sym] (1) -- node [midway, above] {\tiny Withdraw money} (E2); 48 49 % Auditor 50 \node[above= of 1](A){Auditor}; 51 \draw[sym] (A) -- node [midway, right] {\tiny Verify} (1); 52 53 % Separator 54 \node[below=1mm of E1] (S1S) {}; 55 \node[below=1mm of E2] (S1E) {}; 56 \node[above=6mm of E1] (S2S) {}; 57 \node[above=6mm of E2] (S2E) {}; 58 59 \draw[dotted] (S1S) -- (S1E); 60 \draw[dotted] (S2S) -- (S2E); 61 62 \node[below right=-2mm and -1.5mm of S2S] {\tiny{\emph{Settlement Layer}}}; 63 \node[below right=-2mm and -1.5mm of S1S] {\tiny{\emph{Taler payment system}}}; 64 \end{tikzpicture} 65 \column{0.47\paperwidth} 66 67 68 \begin{block}{Taler payment system} 69 \begin{itemize} 70 \item Tokenization 71 \item Blind signatures (privacy) 72 \end{itemize} 73 \end{block} 74 \begin{block}{Settlement layer} 75 \begin{itemize} 76 \item Designed for fiat currencies 77 \item BTC and ETH ? 78 \end{itemize} 79 \end{block} 80 \end{columns} 81 \end{frame} 82 83 \begin{frame}{GNU Taler}{Blockchain settlement layer} 84 \begin{tikzpicture}[remember picture,overlay] 85 \node (N1)[above right=22mm and 56mm of current page.center] {\includegraphics[width=18mm]{./google_play_GNU_Taler.jpg}}; 86 \node [below=-2mm of N1]{wallet.taler.net}; 87 \end{tikzpicture} 88 \begin{center} 89 \begin{tikzpicture}[ 90 rect/.style={rectangle, draw=black, minimum width=30mm}, 91 sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt}, 92 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 93 ] 94 95 %% Architecture 96 \node(Tt){Taler}; 97 \node[rect,below=0cm of Tt](Tc){Exchange}; 98 \node[rect,fit={(Tt) (Tc)}](T){}; 99 100 \node[rect,below=7mm of Tc](D) {\textbf{Depolymerization}}; 101 102 \node[rect,below=7mm of D](Bc){Node}; 103 \node[below=0cm of Bc](Bt){Blockchain}; 104 \node[rect,fit={(Bt) (Bc)}](B){}; 105 106 \draw[sym] (T) -- (D); 107 \draw[sym] (D) -- (B); 108 109 %% Blockchain 110 \node[block,right=8mm of B] (1){}; 111 \node[block,right=4mm of 1] (2){}; 112 \node[block,right=4mm of 2] (3){}; 113 \node[block,right=4mm of 3] (4){}; 114 \node[block,right=4mm of 4] (5){}; 115 \node[block,right=4mm of 5] (6){}; 116 \draw[-stealth] (1) -- (2); 117 \draw[-stealth] (2) -- (3); 118 \draw[-stealth] (3) -- (4); 119 \draw[-stealth] (4) -- (5); 120 \draw[-stealth] (5) -- (6); 121 122 \node[left=4mm of 1] (S){}; 123 \node[right=4mm of 6] (E){}; 124 \draw[-stealth] (S) -- (1); 125 \draw[-stealth] (6) -- (E); 126 127 %% Taler 128 \node[block, below right=-7.5mm and 20.5mm of T] (off){Off-chain transactions}; 129 \node[above=-0.5mm of off] {\includegraphics[height=7mm]{../docs/media/taler.png}}; 130 131 %% Depolymerization 132 \node[right=12mm of D] {\small{Credit}}; 133 \node[right=55mm of D] {\small{Debit}}; 134 \draw[dashed,-stealth] (1.north) |- (off.west); 135 \draw[dashed,-stealth] (off.east) -| (6.north); 136 137 %% Separation 138 \draw[dotted] (-2.1,-1.3) -- (9,-1.3); 139 \draw[dotted] (-2.1,-2.5) -- (9,-2.5); 140 \end{tikzpicture} 141 \end{center} 142 \end{frame} 143 144 \begin{frame}{Blockchain-based cryptocurrencies} 145 \begin{columns} 146 \column{0.4\textwidth} 147 \begin{block}{\textbf{BTC} Bitcoin} 148 \begin{itemize} 149 \item Proof of Work 150 \item new block every $\simeq$10 min 151 \item $\simeq$4 txs per sec 152 \end{itemize} 153 \end{block} 154 \column{0.4\textwidth} 155 \begin{block}{\textbf{ETH} Ethereum} 156 \begin{itemize} 157 \item Proof of Stake 158 \item new block every $\simeq$12 sec 159 \item $\simeq$14 txs per sec 160 \end{itemize} 161 \end{block} 162 \end{columns} 163 \end{frame} 164 165 \begin{frame}{Storing metadata}{Bitcoin} 166 \begin{block}{Bitcoin - Debit} 167 \begin{itemize} 168 \item Transactions from code 169 \item Only 32B + URI 170 \item \textbf{OP\_RETURN} 171 \end{itemize} 172 \end{block} 173 \begin{block}{Bitcoin - Credit} 174 \begin{itemize} 175 \item Transactions from common wallet software 176 \item Only 32B 177 \item \textbf{Fake Segwit Addresses} 178 \end{itemize} 179 \end{block} 180 \end{frame} 181 182 \begin{frame}{Storing metadata}{Ethereum} 183 \begin{block}{Smart contract ?} 184 \begin{itemize} 185 \item Logs in smart contract is the recommended way {\tiny (ethereum.org)} 186 \item Expensive (additional storage and execution fees) 187 \item Avoidable attack surface (error prone) 188 \end{itemize} 189 \end{block} 190 \begin{block}{Custom input format} 191 Use input data in transactions, usually used to call smart contract, to 192 store our metadata. 193 \end{block} 194 \end{frame} 195 196 \begin{frame}{Chain reorganization} 197 \begin{center} 198 \begin{tikzpicture}[ 199 block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, 200 nconf/.style={dotted,fill=none}, 201 replaced/.style={pattern=north east lines,draw=black!60,fill opacity=0.3}, 202 err/.style={draw=black!60!red,fill=black!60!red!10,dashed}, 203 ar/.style={-stealth} 204 ] 205 % Common 206 \node[block](2){}; 207 \node[block,right=5mm of 2](3){}; 208 \draw[ar] (2) -- (3); 209 210 % Current 211 \node[block,replaced,right=5mm of 3](4){}; 212 \node[block,replaced,right=5mm of 4](5){$T$}; 213 \draw[ar] (3) -- (4); 214 \draw[ar] (4) -- (5); 215 216 217 % Fork 218 \node[block,above=7mm of 4](4p){}; 219 \only<1>{ 220 \node[block,right=5mm of 4p](5p){}; 221 } 222 \only<2>{ 223 \node[block,err,right=5mm of 4p](5p){$T'$}; 224 } 225 \node[block,right=5mm of 5p](6p){}; 226 \node[block,nconf,right=5mm of 6p](7p){ 227 \only<1>{$T$} 228 }; 229 \draw[ar] (3.east) -- (4p.west); 230 \draw[ar] (4p) -- (5p); 231 \draw[ar] (5p) -- (6p); 232 \draw[ar] (6p) -- (7p); 233 234 235 % Indication 236 \node [right=5mm of 7p]{\emph{active}}; 237 \node [right=29mm of 5]{\emph{fork}}; 238 \end{tikzpicture} 239 \end{center} 240 \begin{center} 241 \only<1>{Reorganization can remove transaction from the chain} 242 \only<2>{A conflict can invalidate the transaction} 243 \end{center} 244 \end{frame} 245 246 \begin{frame}{Stuck transactions} 247 \begin{center} 248 \begin{tikzpicture}[ 249 dot/.style={circle,fill,inner sep=1pt,} 250 ] 251 \node (I) {\includegraphics[width=\textwidth]{../docs/media/fee.png}}; 252 \node [below left=-2.5mm and -1.5cm of I] (Tx) {\small Tx}; 253 \node [dot,above=8.4mm of Tx](D) {}; 254 \draw [dotted,thick] (Tx) -- (D); 255 \node [left=-4.5cm of Tx] (C) {\small conf}; 256 \node [dot,above=8.4mm of C](D1) {}; 257 \draw [dotted,thick] (C) -- (D1); 258 \end{tikzpicture} 259 \end{center} 260 \begin{center} 261 Stuck transactions caused by transaction fees being a market-based value 262 \end{center} 263 \end{frame} 264 265 \begin{frame}{Incompatible amount} 266 GNU Taler amount follow RFC 8905: $2^{53}$ unit and 8 decimal digits 267 \begin{block}{\textbf{BTC} Bitcoin} 268 \begin{itemize} 269 \item 1 satoshi = $10^{-8}$ BTC 270 \item capped at 21 000 000 BTC 271 \item Fit perfectly 272 \end{itemize} 273 \end{block} 274 \begin{block}{\textbf{ETH} Ethereum} 275 \begin{itemize} 276 \item 1 wei = $10^{-18}$ ETH 277 \item actually more than 120 580 000 without cap 278 \item average fee: 21 000 * 14 = 294 000 Gwei or 0.000295 ETH 279 \item truncated at $10^{-8}$ ETH it can still represent any amount you can send without losing money 280 \end{itemize} 281 \end{block} 282 \end{frame} 283 284 \begin{frame}{Implementation} 285 Download a wallet from \url{wallet.taler.net} and add our experimental bitcoin exchange at \url{bitcoin.ice.bfh.ch} 286 287 \center\includegraphics[width=10.4cm]{./electrum.jpg} 288 \end{frame} 289 290 291 \begin{frame}{Conclusion} 292 Distributed Ledgers can be used as a settlement layer for GNU Taler 293 with Depolymerizer. 294 295 \begin{itemize} 296 \item [$-$] Trust exchange operators or auditors 297 \item [$+$] Fast and cheap 298 \item [$+$] Realtime, ms latency 299 \item [$+$] Linear scalability 300 \item [$+$] Ecological 301 \item [$+$] Privacy when it can, transparency when it must (avoid tax evasion and money laundering) 302 \end{itemize} 303 \end{frame} 304 305 \end{document}