slides-EuroDIG2025.tex (17266B)
1 \documentclass[aspectratio=169,t]{beamer} 2 3 \input texinputs/taler-macros 4 5 \usepackage{tikz} 6 \usepackage{ragged2e} 7 \usetikzlibrary{positioning,fit,patterns} 8 9 % 10 % Presentation to "EuroDIG 2025 in Strasbourg 13 May 2025" 11 % Copyright (C) 2025 Emmanuel Benoist, .... 12 % 13 % This program is free software: you can redistribute it and/or modify 14 % it under the terms of the GNU General Public License as published by 15 % the Free Software Foundation, either version 3 of the License, or 16 % (at your option) any later version. 17 % 18 % This program is distributed in the hope that it will be useful, 19 % but WITHOUT ANY WARRANTY; without even the implied warranty of 20 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 % GNU General Public License for more details. 22 % 23 % You should have received a copy of the GNU General Public License 24 % along with this program. If not, see <http://www.gnu.org/licenses/>. 25 % 26 27 % *Especially* edit these... 28 % \setbeameroption{show notes on second screen=right} % Both 29 30 \newcommand{\SPEAKER}{Ch. Grothoff, O. Rappaport, and E. Benoist} 31 \newcommand{\DATE}{May 13, 2025} 32 \title{} 33 \date{} 34 35 36 \newcommand{\TITLE}{Unchained Digital Cash Payments} 37 \newcommand{\SUB}{EuroDIG 2025, Strasbourg} 38 \newcommand{\AUTHOR}{Christian Grothoff, Olivier Rappaport, and Emmanuel Benoist} 39 \newcommand{\INST}{ https://www.taler.net} 40 41 % Do not edit this part 42 \title{\TITLE} 43 \subtitle{\SUB} 44 \date{\DATE} 45 \author[\SPEAKER]{\AUTHOR} 46 \institute{\INST} 47 48 \usepackage{amsmath} 49 \usepackage{multimedia} 50 \usepackage[percent]{overpic} 51 \usepackage{url} 52 \usepackage{pifont} 53 \usepackage[absolute,overlay]{textpos} 54 \usepackage{listings} 55 56 \usepackage{tikz, xcolor} 57 \usetikzlibrary{shapes,arrows,positioning} 58 \tikzset{ 59 %Define standard arrow tip 60 >=stealth', 61 %Define style for boxes 62 punkt/.style={ 63 rectangle, 64 rounded corners, 65 draw=black, very thick, 66 minimum width=3.5em, 67 minimum height=2em, 68 text centered}, 69 % Define arrow style 70 pull/.style={ 71 <->, 72 thick,draw=red, 73 shorten <=2pt, 74 shorten >=2pt,}, 75 % Define arrow style 76 pil/.style={ 77 ->, 78 thick, 79 shorten <=2pt, 80 shorten >=2pt,} 81 } 82 83 84 %\usepackage{tikz, xcolor} 85 %\usetikzlibrary{shapes,arrows} 86 87 88 \tikzstyle{decision} = [diamond, draw, text width=4.5em, 89 text badly centered, node distance=2cm, 90 inner sep=0pt] 91 \tikzstyle{block} = [rectangle, draw, text width=5em, 92 text centered, rounded corners, 93 minimum height=4em, node distance=3cm] 94 \tikzstyle{line} = [draw, -latex'] 95 \tikzstyle{lineeee} = [draw] 96 \tikzstyle{cloud} = [draw, ellipse, node distance=2.5cm, minimum height=2em] 97 \tikzstyle{walet} = [draw, rectangle, node distance=0.2cm, minimum height=2em] 98 \tikzstyle{reseau} = [node distance=0.2cm, minimum height=2em] 99 \tikzstyle{blank} = [node distance=1cm] 100 101 \usetikzlibrary{shapes,arrows} 102 \usetikzlibrary{positioning} 103 \usetikzlibrary{calc} 104 105 106 107 108 109 \begin{document} 110 111 112 \frame{\maketitle 113 } 114 115 116 \begin{frame} 117 \frametitle{Taler} 118 119 \tableofcontents 120 \end{frame} 121 122 \section{Taler a privacy preserving payment system} 123 124 % free 125 % privacy friendly 126 % coins, no ledger 127 % blindly signed coins 128 % 3 tiers architecture 129 130 131 \section{Introduction to GNU Taler} 132 \begin{frame}{GNU Taler} 133 \vfill 134 \begin{center} 135 {\huge {\bf Digital} cash, made \textbf{socially responsible}.} 136 \end{center} 137 \vfill 138 \begin{center} 139 \includegraphics[width=0.5\textwidth]{images/taler-logo-2021-inkscape.pdf} 140 \end{center} 141 \vfill 142 \begin{center} 143 Privacy-Preserving, Practical, Taxable, Free Software, Efficient 144 \end{center} 145 \vfill 146 \vfill 147 \ % 148 \end{frame} 149 150 151 \begin{frame}{What is GNU Taler?} 152 \framesubtitle{\url{https://taler.net/en/features.html}} 153 \noindent 154 GNU Taler is 155 \vfill 156 \begin{itemize} 157 \item a Free/Libre software \emph{payment system} infrastructure project 158 \item ... with a surrounding software ecosystem 159 \item ... and a company (Taler Systems S.A.) and community that wants to deploy it 160 as widely as possible. 161 \end{itemize} 162 \vfill 163 \noindent 164 However, GNU Taler is 165 \begin{itemize} 166 \item \emph{not} a currency 167 \item \emph{not} a long-term store of value 168 \item \emph{not} a network or instance of a system 169 \item \emph{not} decentralized 170 \item \emph{not} based on proof-of-work or proof-of-stake 171 \item \emph{not} a speculative asset / ``get-rich-quick scheme'' 172 \end{itemize} 173 \vfill 174 \end{frame} 175 176 177 \begin{frame}{Design goals for the GNU Taler Payment System} 178 GNU Taler must ... 179 \begin{enumerate} 180 \item {... be implemented as {\bf free software}.} 181 \item {... protect the {\bf privacy of buyers}.} 182 \item {... must enable the state to {\bf tax income} and crack down on 183 illegal business activities.} 184 \item {... prevent payment fraud.} 185 \item {... only {\bf disclose the minimal amount of information 186 necessary}.} 187 \item {... be usable.} 188 \item {... be efficient.} 189 \item {... avoid single points of failure.} 190 \item {... foster {\bf competition}.} 191 \end{enumerate} 192 \end{frame} 193 194 195 \begin{frame} 196 \frametitle{GNU Taler Overview} 197 \begin{center} 198 \begin{tikzpicture} 199 \tikzstyle{def} = [node distance= 4.5em and 6em, inner sep=1em, outer sep=.3em]; 200 \node (origin) at (0,0) {}; 201 \node (exchange) [def,above=of origin,draw]{Exchange}; 202 \node (customer) [def, draw, below left=of origin] {Customer}; 203 \node (merchant) [def, draw, below right=of origin] {Merchant}; 204 % \node (auditor) [def, draw, above right=of origin]{Auditor}; 205 \tikzstyle{C} = [color=black, line width=1pt] 206 \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] (TextNode) {withdraw coins}; 207 \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; 208 \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; 209 % \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {verify}; 210 \end{tikzpicture} 211 \end{center} 212 \end{frame} 213 214 215 216 217 \begin{frame}{Taler: Deployment plan} 218 219 \begin{block}{In Switzerland} 220 \begin{itemize} 221 \item \textit{Netzbon}: Local currency in Basel, deployment already started. 222 \item \textit{BFH Intern}: Snacks and café automats, in use. 223 \item \textit{CHF in Switzerland}: deployment just started 224 \end{itemize} 225 \end{block} 226 \begin{block}{Europe} 227 \begin{itemize} 228 \item \textit{NGI-Taler project} with a German bank (GLS), deployment in 229 the Eurozone for the end of 2025. 230 231 With a Hungarian bank (MagNet) deployment in 2026 in Hungary. 232 \item \textit{Depolymerizer} for Bitcoin. Working already as a University 233 research project (not commercial). 234 \end{itemize} 235 \end{block} 236 \end{frame} 237 238 239 240 241 \section{Customer user expirience} 242 % Install the wallet 243 244 % Withdraw money Play money (maybe add demo exchange if needed). 245 % (show a real withdraw money) 246 247 % Send money 248 249 % Ask for money 250 251 252 253 \begin{frame} 254 \frametitle{Install the app on your phone} 255 \framesubtitle{Alternatives (for browsers, etc.) \url{wallet.taler.net}} 256 \begin{columns} 257 \begin{column}{0.47\textwidth} 258 \begin{center} 259 Apple App Store 260 261 \includegraphics[width=0.3\textwidth]{./images/Apple_logo_black.jpg} 262 \includegraphics[width=0.6\textwidth]{./qr-codes/QR-Code-Apple-app-store.png} 263 264 \end{center} 265 \end{column} 266 \begin{column}{0.47\textwidth} 267 268 269 \begin{center} 270 Google Play Store 271 272 \includegraphics[width=0.3\textwidth]{./images/Google_play_logo.jpg} 273 \includegraphics[width=0.6\textwidth]{./qr-codes/QR-Code-Google-Play-store.png} 274 275 \end{center} 276 \end{column} 277 \end{columns} 278 \footnotesize 279 %Alternatives (Chrome, Firefox, Chromium, Opera extensions, F-Droid, pure APK 280 %for Android, ...): 281 %\url{https://wallet.taler.net} 282 \end{frame} 283 284 285 \begin{frame} 286 \frametitle{Install the app from the store} 287 \framesubtitle{ Install the Taler Wallet} 288 \begin{columns} 289 \begin{column}{0.67\textwidth} 290 \begin{center} 291 \includegraphics[width=0.7\textwidth]{./screenshots/01_Play_store-3.jpeg} 292 \end{center} 293 \end{column} 294 \begin{column}{0.27\textwidth} 295 \begin{center} 296 Taler wallet icon: 297 298 \vspace{1cm} 299 300 \includegraphics[width=0.4\textwidth]{./screenshots/02_icon_taler_app.jpg} 301 \end{center} 302 \end{column} 303 \end{columns} 304 305 \end{frame} 306 307 308 \begin{frame} 309 \frametitle{Welcome page : get demo money} 310 \begin{columns} 311 \begin{column}{0.47\textwidth} 312 \begin{center} 313 \includegraphics[width=0.4\textwidth]{./screenshots/03_welcome_screen_get_demo_money.jpeg} 314 \end{center} 315 \end{column} 316 \begin{column}{0.47\textwidth} 317 \begin{center} 318 319 \includegraphics[width=1\textwidth]{./screenshots/03_welcome_screen_get_demo_money_with_arrow.jpeg} 320 321 \end{center} 322 \end{column} 323 \end{columns} 324 325 \end{frame} 326 327 328 \begin{frame} 329 \frametitle{Start action menu} 330 \begin{columns} 331 \begin{column}{0.47\textwidth} 332 \begin{center} 333 \includegraphics[width=0.4\textwidth]{./screenshots/04_after_withdrawal.jpeg} 334 \end{center} 335 \end{column} 336 \begin{column}{0.47\textwidth} 337 \begin{center} 338 339 \includegraphics[width=1\textwidth]{./screenshots/04_after_withdrawal_with_arrow.jpeg} 340 341 \end{center} 342 \end{column} 343 \end{columns} 344 345 \end{frame} 346 347 348 \begin{frame} 349 \frametitle{Send money to another wallet} 350 \begin{columns} 351 \begin{column}{0.47\textwidth} 352 \begin{center} 353 \includegraphics[width=0.4\textwidth]{./screenshots/05_menu_empty_history.jpeg} 354 \end{center} 355 \end{column} 356 \begin{column}{0.47\textwidth} 357 \begin{center} 358 359 \includegraphics[width=1\textwidth]{./screenshots/05_menu_empty_history_with_arrow.jpeg} 360 361 \end{center} 362 \end{column} 363 \end{columns} 364 365 \end{frame} 366 367 368 \begin{frame} 369 \frametitle{Fill out the form to generate the QR-Code} 370 \begin{columns} 371 \begin{column}{0.47\textwidth} 372 \begin{center} 373 \includegraphics[width=0.4\textwidth]{./screenshots/06_send_money.jpeg} 374 \end{center} 375 \end{column} 376 \begin{column}{0.47\textwidth} 377 % \begin{block}{Forms informations} 378 % \begin{itemize} 379 % \item Amount and Currence (if your wallet contains many) 380 % \item Purpose (to be able to find it later on) 381 % \item Expiry time of the payment. 382 % \end{itemize} 383 % \end{block} 384 \begin{center} 385 \includegraphics[width=0.4\textwidth]{./screenshots/07_sending.jpeg} 386 \end{center} 387 388 \end{column} 389 \end{columns} 390 391 \end{frame} 392 393 394 395 \begin{frame} 396 \frametitle{Request Money from another Wallet} 397 \begin{columns} 398 \begin{column}{0.47\textwidth} 399 \begin{center} 400 \includegraphics[width=0.4\textwidth]{./screenshots/09_menu_after_sending.jpeg} 401 \end{center} 402 \end{column} 403 \begin{column}{0.47\textwidth} 404 405 \begin{center} 406 \includegraphics[width=0.8\textwidth]{./screenshots/09_menu_after_sending_with_arrow.jpeg} 407 \end{center} 408 409 \end{column} 410 \end{columns} 411 412 \end{frame} 413 414 415 416 \begin{frame} 417 \frametitle{Generate a Request for Money and its QR-code} 418 \begin{columns} 419 \begin{column}{0.47\textwidth} 420 \begin{center} 421 \includegraphics[width=0.35\textwidth]{./screenshots/10_receiving_money.jpeg} 422 \end{center} 423 \end{column} 424 \begin{column}{0.47\textwidth} 425 426 \begin{center} 427 \includegraphics[width=0.35\textwidth]{./screenshots/11_receiving_money_QRcode.jpeg} 428 \end{center} 429 430 \end{column} 431 \end{columns} 432 433 \end{frame} 434 435 436 437 438 \section{Merchant Integration (Rest API for payment)} 439 440 441 442 % Create an order in a Merchant Backend (simple order) 443 % Someone pays. 444 % Check status. 445 % Web interface + CURL + QR Code generator 446 447 448 449 \section{Manipulate merchant backend} 450 \subsection{Using Single Page Application} 451 452 \begin{frame} 453 \frametitle{Create a merchant account and your first order} 454 455 \begin{columns} 456 \begin{column}{0.45\textwidth} 457 \begin{block}{Access the merchant backend} 458 \url{https://backend.demo.taler.net/instances/sandbox/} 459 Access Token : \texttt{sandbox} 460 \end{block} 461 \begin{center} 462 \includegraphics[width=0.4\textwidth]{./images/QR-code-backend.demo.taler.net.png} 463 464 465 \end{center} 466 \end{column} 467 \begin{column}{0.45\textwidth} 468 \begin{block}{Create your shop / do your first delivery} 469 470 \begin{itemize} 471 \item Create a product. 472 \item Create a new \emph{``Order''}. 473 \item Give the QR-code to your neighbour for them to pay ;-) 474 \item Wait for confirmation. 475 \end{itemize} 476 \end{block} 477 478 \end{column} 479 \end{columns} 480 481 \end{frame} 482 483 \subsection{Using RESTfull API} 484 485 \begin{frame}[containsverbatim] 486 \frametitle{Use Rest API} 487 488 \begin{block}{Connect from your program} 489 \begin{itemize} 490 \item RESTfull interface 491 \item CRUD functionalities 492 \item Interfacable with any system 493 \end{itemize} 494 \end{block} 495 496 \begin{verbatim} 497 curl --request GET \ 498 --url https://backend.demo.taler.net/instances/sandbox/private/products \ 499 --header 'Authorization: Bearer secret-token:sandbox' \ 500 --header 'User-Agent: yourApp/0.0.1' 501 502 \end{verbatim} 503 \end{frame} 504 505 \begin{frame}[fragile,fragile] 506 \frametitle{Insert a new order} 507 508 \begin{verbatim} 509 curl --request POST \ 510 --url https://backend.demo.taler.net/instances/sandbox/private/orders \ 511 --header 'Authorization: Bearer secret-token:sandbox' \ 512 --header 'Content-Type: application/json' \ 513 --header 'User-Agent: yourApp/0.0.1' \ 514 --data '{"order":{ 515 "amount": "KUDOS:10", 516 "summary": "Test for EuroDIG", 517 "fulfillment_message": "Thank you"}}' 518 \end{verbatim} 519 520 521 522 % curl --request POST \ 523 % --url https://backend.demo.taler.net/instances/sandbox/private/orders \ 524 % --header 'Authorization: Bearer secret-token:sandbox' \ 525 % --header 'Content-Type: application/json' \ 526 % --header 'User-Agent: yourApp/0.0.1' \ 527 % --data '{"order":{ 528 % "amount": "KUDOS:10", 529 % "summary": "Test for EuroDIG", 530 % "fulfillment_message": "Thank you"}, 531 % "create_token":false}' 532 533 534 535 536 537 % curl --request POST \ 538 % --url https://backend.demo.taler.net/instances/sandbox/private/products \ 539 % --header 'Authorization: Bearer secret-token:sandbox' \ 540 % --header 'Content-Type: application/json' \ 541 % --header 'User-Agent: yourApp/0.0.1' \ 542 % --data '{"address":{},"description_i18n":{}, 543 % "taxes":[],"next_restock":{"t_s":"never"}, 544 % "price":"KUDOS:5","product_id":"0001-2", 545 % "description":"Cryptography course", 546 % "unit":"piece","total_stock":-1}' 547 548 549 \end{frame} 550 551 \begin{frame}[fragile,fragile] 552 \frametitle{Insert a new order (Cont.)} 553 554 555 Got the message as a response: 556 \begin{verbatim} 557 { 558 "order_id": "2025.112-0080M3T5162RE", 559 "token": "YTRXG5FQ8WTAC3PWRCMT4GMYA4" 560 }% 561 562 { 563 "order_id": "2025.112-02CDQQYASFPPY" 564 }% 565 566 \end{verbatim} 567 568 \end{frame} 569 570 \begin{frame}[fragile] 571 \frametitle{Generate the payment URL} 572 573 \begin{block}{URL : "https://"+Host +"/orders/" + payment ID} 574 \end{block} 575 576 % To get the QR Code 577 \begin{verbatim} 578 https://backend.demo.taler.net/instances/sandbox/orders/2025.132-01RCH1C173JC4 579 \end{verbatim} 580 % To get the status 581 \begin{verbatim} 582 https://backend.demo.taler.net/instances/sandbox/private/orders/2025.132-01RCH1C173JC4 583 \end{verbatim} 584 % Should work to 585 \begin{verbatim} 586 taler://pay/backend.demo.taler.net/instances/sandbox/2025.132-01RCH1C173JC4 587 \end{verbatim} 588 589 \end{frame} 590 591 \section{Questions and Answers} 592 593 \begin{frame} 594 \frametitle{Questions ?} 595 \begin{columns} 596 \begin{column}{0.3\textwidth} 597 \begin{center} 598 \includegraphics[width=0.9\textwidth]{./images/3d-question-mark} 599 \end{center} 600 \end{column} 601 \begin{column}{0.65\textwidth} 602 603 604 \begin{block}{Contacts} 605 \begin{itemize} 606 \item \url{https://www.taler.net} 607 \item christian.grothoff@bfh.ch 608 \item olivierrappaport.eseniors@gmail.com 609 \item emmanuel.benoist@bfh.ch 610 \end{itemize} 611 \end{block} 612 \end{column} 613 \end{columns} 614 \end{frame} 615 616 617 618 619 620 621 \begin{frame}{Acknowledgements} 622 623 \begin{minipage}{0.45\textwidth} \ \\ 624 {\tiny Funded by the European Union (Project 101135475).} 625 626 \begin{center} 627 \includegraphics[width=0.5\textwidth]{./images/bandera.jpg} 628 \end{center} 629 \end{minipage} 630 \hfill 631 \begin{minipage}{0.45\textwidth} 632 {\tiny Funded by SERI (HEU-Projekt 101135475-TALER).} 633 634 \begin{center} 635 \includegraphics[width=0.65\textwidth]{./images/sbfi.jpg} 636 \end{center} 637 \end{minipage} 638 639 \vfill 640 641 {\tiny Views and opinions expressed are however those of the author(s) only 642 and do not necessarily reflect those of the European Union. Neither the 643 European Union nor the granting authority can be held responsible for 644 them.} 645 \end{frame} 646 647 648 \end{document} 649 \begin{frame} 650 \frametitle{Example} 651 \begin{columns} 652 \begin{column}{0.47\textwidth} 653 \begin{center} 654 \includegraphics[width=0.8\textwidth]{./images/3d-question-mark.jpg} 655 656 \end{center} 657 \end{column} 658 \begin{column}{0.47\textwidth} 659 660 \begin{block}{Title for block} 661 \begin{itemize} 662 \item Item number 1 663 \end{itemize} 664 \end{block} 665 \end{column} 666 \end{columns} 667 668 \end{frame}