depolymerization

wire gateway for Bitcoin/Ethereum
Log | Files | Refs | Submodules | README | LICENSE

commit a5767d94f785e27cce6d9f450997fe6c8d3ed883
parent 6676e056f5fee77e183fc58bc4a0e94a94b0f370
Author: Antoine A <>
Date:   Sun, 11 Dec 2022 18:34:16 +0100

Merge branch 'master' of git+ssh://git.taler.net/depolymerization

Diffstat:
Apres-brains22/electrum.jpg | 0
Apres-brains22/presentation.tex | 305++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 305 insertions(+), 0 deletions(-)

diff --git a/pres-brains22/electrum.jpg b/pres-brains22/electrum.jpg Binary files differ. diff --git a/pres-brains22/presentation.tex b/pres-brains22/presentation.tex @@ -0,0 +1,305 @@ +\documentclass[aspectratio=169]{beamer} +\usepackage{tikz} +\usepackage{ragged2e} + +\apptocmd{\frame}{}{\justifying}{} + +\usetikzlibrary{positioning,fit,patterns} + +\title{Depolymerization} +\subtitle{Integrating GNU Taler with blockchain-based cryptocurrencies} +\author{ Antoine d'Aligny \and Emmanuel Benoist \and Christian Grothoff} +\institute{Bern University of Applied Sciences} +\date{\today} +\titlegraphic{\includegraphics[width=2.5cm]{../docs/media/taler.png}} + + +\begin{document} + +\begin{frame} + \titlepage +\end{frame} + +\begin{frame}{GNU Taler}{Overview} + \begin{tikzpicture}[remember picture,overlay] + \node (N1)[above right=22mm and 56mm of current page.center] {\includegraphics[width=18mm]{./google_play_GNU_Taler.jpg}}; + \node [below=-2mm of N1]{wallet.taler.net}; + \end{tikzpicture} + \begin{columns} + \column{0.5\textwidth} + \begin{tikzpicture}[ + rect/.style={circle, draw=black}, + sym/.style={-stealth, shorten >= 2pt, shorten <= 2pt} + ] + % Taler payment system + \node[rect](1) {Exchange}; + \node[rect,below left=1.5cm and 0.7cm of 1](2) {Customer}; + \node[rect,below right=1.5cm and 0.7cm of 1](3) {Merchant}; + + \draw[sym] (1) -- node [midway, above, sloped] {\tiny Withdraw coins} (2); + \draw[sym] (2) -- node [midway, above, sloped] {\tiny Spend coins} (3); + \draw[sym] (3) -- node [midway, above, sloped] {\tiny Deposit coins} (1); + + % Settlement layer + \node[left=2cm of 1](E1){}; + \node[right=2cm of 1](E2){}; + \draw[sym] (E1) -- node [midway, above] {\tiny Deposit money} (1); + \draw[sym] (1) -- node [midway, above] {\tiny Withdraw money} (E2); + + % Auditor + \node[above= of 1](A){Auditor}; + \draw[sym] (A) -- node [midway, right] {\tiny Verify} (1); + + % Separator + \node[below=1mm of E1] (S1S) {}; + \node[below=1mm of E2] (S1E) {}; + \node[above=6mm of E1] (S2S) {}; + \node[above=6mm of E2] (S2E) {}; + + \draw[dotted] (S1S) -- (S1E); + \draw[dotted] (S2S) -- (S2E); + + \node[below right=-2mm and -1.5mm of S2S] {\tiny{\emph{Settlement Layer}}}; + \node[below right=-2mm and -1.5mm of S1S] {\tiny{\emph{Taler payment system}}}; + \end{tikzpicture} + \column{0.47\paperwidth} + + + \begin{block}{Taler payment system} + \begin{itemize} + \item Tokenization + \item Blind signatures (privacy) + \end{itemize} + \end{block} + \begin{block}{Settlement layer} + \begin{itemize} + \item Designed for fiat currencies + \item BTC and ETH ? + \end{itemize} + \end{block} + \end{columns} +\end{frame} + +\begin{frame}{GNU Taler}{Blockchain settlement layer} + \begin{tikzpicture}[remember picture,overlay] + \node (N1)[above right=22mm and 56mm of current page.center] {\includegraphics[width=18mm]{./google_play_GNU_Taler.jpg}}; + \node [below=-2mm of N1]{wallet.taler.net}; + \end{tikzpicture} + \begin{center} + \begin{tikzpicture}[ + rect/.style={rectangle, draw=black, minimum width=30mm}, + sym/.style={stealth-stealth, shorten >= 2pt, shorten <= 2pt}, + block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, + ] + + %% Architecture + \node(Tt){Taler}; + \node[rect,below=0cm of Tt](Tc){Exchange}; + \node[rect,fit={(Tt) (Tc)}](T){}; + + \node[rect,below=7mm of Tc](D) {\textbf{Depolymerization}}; + + \node[rect,below=7mm of D](Bc){Node}; + \node[below=0cm of Bc](Bt){Blockchain}; + \node[rect,fit={(Bt) (Bc)}](B){}; + + \draw[sym] (T) -- (D); + \draw[sym] (D) -- (B); + + %% Blockchain + \node[block,right=8mm of B] (1){}; + \node[block,right=4mm of 1] (2){}; + \node[block,right=4mm of 2] (3){}; + \node[block,right=4mm of 3] (4){}; + \node[block,right=4mm of 4] (5){}; + \node[block,right=4mm of 5] (6){}; + \draw[-stealth] (1) -- (2); + \draw[-stealth] (2) -- (3); + \draw[-stealth] (3) -- (4); + \draw[-stealth] (4) -- (5); + \draw[-stealth] (5) -- (6); + + \node[left=4mm of 1] (S){}; + \node[right=4mm of 6] (E){}; + \draw[-stealth] (S) -- (1); + \draw[-stealth] (6) -- (E); + + %% Taler + \node[block, below right=-7.5mm and 20.5mm of T] (off){Off-chain transactions}; + \node[above=-0.5mm of off] {\includegraphics[height=7mm]{../docs/media/taler.png}}; + + %% Depolymerization + \node[right=12mm of D] {\small{Credit}}; + \node[right=55mm of D] {\small{Debit}}; + \draw[dashed,-stealth] (1.north) |- (off.west); + \draw[dashed,-stealth] (off.east) -| (6.north); + + %% Separation + \draw[dotted] (-2.1,-1.3) -- (9,-1.3); + \draw[dotted] (-2.1,-2.5) -- (9,-2.5); + \end{tikzpicture} + \end{center} +\end{frame} + +\begin{frame}{Blockchain-based cryptocurrencies} + \begin{columns} + \column{0.4\textwidth} + \begin{block}{\textbf{BTC} Bitcoin} + \begin{itemize} + \item Proof of Work + \item new block every $\simeq$10 min + \item $\simeq$4 txs per sec + \end{itemize} + \end{block} + \column{0.4\textwidth} + \begin{block}{\textbf{ETH} Ethereum} + \begin{itemize} + \item Proof of Stake + \item new block every $\simeq$12 sec + \item $\simeq$14 txs per sec + \end{itemize} + \end{block} + \end{columns} +\end{frame} + +\begin{frame}{Storing metadata}{Bitcoin} + \begin{block}{Bitcoin - Debit} + \begin{itemize} + \item Transactions from code + \item Only 32B + URI + \item \textbf{OP\_RETURN} + \end{itemize} + \end{block} + \begin{block}{Bitcoin - Credit} + \begin{itemize} + \item Transactions from common wallet software + \item Only 32B + \item \textbf{Fake Segwit Addresses} + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}{Storing metadata}{Ethereum} + \begin{block}{Smart contract ?} + \begin{itemize} + \item Logs in smart contract is the recommended way {\tiny (ethereum.org)} + \item Expensive (additional storage and execution fees) + \item Avoidable attack surface (error prone) + \end{itemize} + \end{block} + \begin{block}{Custom input format} + Use input data in transactions, usually used to call smart contract, to + store our metadata. + \end{block} +\end{frame} + +\begin{frame}{Chain reorganization} + \begin{center} + \begin{tikzpicture}[ + block/.style={rectangle,draw=black,fill=black!10,minimum size=7mm}, + nconf/.style={dotted,fill=none}, + replaced/.style={pattern=north east lines,draw=black!60,fill opacity=0.3}, + err/.style={draw=black!60!red,fill=black!60!red!10,dashed}, + ar/.style={-stealth} + ] + % Common + \node[block](2){}; + \node[block,right=5mm of 2](3){}; + \draw[ar] (2) -- (3); + + % Current + \node[block,replaced,right=5mm of 3](4){}; + \node[block,replaced,right=5mm of 4](5){$T$}; + \draw[ar] (3) -- (4); + \draw[ar] (4) -- (5); + + + % Fork + \node[block,above=7mm of 4](4p){}; + \only<1>{ + \node[block,right=5mm of 4p](5p){}; + } + \only<2>{ + \node[block,err,right=5mm of 4p](5p){$T'$}; + } + \node[block,right=5mm of 5p](6p){}; + \node[block,nconf,right=5mm of 6p](7p){ + \only<1>{$T$} + }; + \draw[ar] (3.east) -- (4p.west); + \draw[ar] (4p) -- (5p); + \draw[ar] (5p) -- (6p); + \draw[ar] (6p) -- (7p); + + + % Indication + \node [right=5mm of 7p]{\emph{active}}; + \node [right=29mm of 5]{\emph{fork}}; + \end{tikzpicture} + \end{center} + \begin{center} + \only<1>{Reorganization can remove transaction from the chain} + \only<2>{A conflict can invalidate the transaction} + \end{center} +\end{frame} + +\begin{frame}{Stuck transactions} + \begin{center} + \begin{tikzpicture}[ + dot/.style={circle,fill,inner sep=1pt,} + ] + \node (I) {\includegraphics[width=\textwidth]{../docs/media/fee.png}}; + \node [below left=-2.5mm and -1.5cm of I] (Tx) {\small Tx}; + \node [dot,above=8.4mm of Tx](D) {}; + \draw [dotted,thick] (Tx) -- (D); + \node [left=-4.5cm of Tx] (C) {\small conf}; + \node [dot,above=8.4mm of C](D1) {}; + \draw [dotted,thick] (C) -- (D1); + \end{tikzpicture} + \end{center} + \begin{center} + Stuck transactions caused by transaction fees being a market-based value + \end{center} +\end{frame} + +\begin{frame}{Incompatible amount} + GNU Taler amount follow RFC 8905: $2^{53}$ unit and 8 decimal digits + \begin{block}{\textbf{BTC} Bitcoin} + \begin{itemize} + \item 1 satoshi = $10^{-8}$ BTC + \item capped at 21 000 000 BTC + \item Fit perfectly + \end{itemize} + \end{block} + \begin{block}{\textbf{ETH} Ethereum} + \begin{itemize} + \item 1 wei = $10^{-18}$ ETH + \item actually more than 120 580 000 without cap + \item average fee: 21 000 * 14 = 294 000 Gwei or 0.000295 ETH + \item truncated at $10^{-8}$ ETH it can still represent any amount you can send without losing money + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}{Implementation} + Download a wallet from \url{wallet.taler.net} and add our experimental bitcoin exchange at \url{bitcoin.ice.bfh.ch} + + \center\includegraphics[width=10.4cm]{./electrum.jpg} +\end{frame} + + +\begin{frame}{Conclusion} + Distributed Ledgers can be used as a settlement layer for GNU Taler + with Depolymerizer. + + \begin{itemize} + \item [$-$] Trust exchange operators or auditors + \item [$+$] Fast and cheap + \item [$+$] Realtime, ms latency + \item [$+$] Linear scalability + \item [$+$] Ecological + \item [$+$] Privacy when it can, transparency when it must (avoid tax evasion and money laundering) + \end{itemize} +\end{frame} + +\end{document}