en.tex (24762B)
1 \documentclass{article} 2 \usepackage[margin=1in]{geometry} 3 \usepackage[utf8]{inputenc} 4 \usepackage{wrapfig} 5 6 \usepackage{textcomp} 7 \usepackage{xcolor} 8 \usepackage{bytefield} 9 \usepackage{tikz} 10 \usetikzlibrary{positioning,fit} 11 \usepackage{graphicx} 12 \usepackage{url} 13 \title{Project Depolymerization: \\ 14 Bitcoin Payments with GNU Taler} 15 16 \begin{document} 17 18 \author{Antoine d'Aligny \and Emmanuel Benoist \and Christian Grothoff} 19 20 \maketitle 21 22 \begin{abstract} 23 GNU Taler is an electronic payment system implemented as Free Software. The 24 Depolymerization of the Bern University of Applied Sciences (BFH) enables 25 payments with blockchain-based cryptocurrencies using GNU Taler. This 26 article explains how to use the resulting payment system to efficiently and 27 quickly pay with Bitcoin. 28 \end{abstract} 29 30 \section{Introduction} 31 32 Today, popular cryptocurrencies like Bitcoin~\cite{nakamoto2008bitcoin} and 33 Ethereum~\cite{ethereum} are not useful for electronic payments in everyday 34 life (say to buy bread, pay for a beer or a snack in a vending machine). For 35 real-world payments, on-chain transactions are too slow, too expensive and the 36 decentralized nature of blockchains does not allow transaction rates required 37 in practice. 38 39 GNU Taler is a centralized payment system that allows privacy-preserving 40 payments to be settled within milliseconds at minimal cost. By combining 41 the GNU Taler payment system with a blockchain, GNU Taler can address key 42 performance and privacy limitations of blockchains. 43 Figure~\ref{fig:offchain} shows the resulting architecture where GNU Taler 44 serves as a layer-2 solution over a blockchain. 45 46 \begin{figure}[hb] 47 \begin{center} 48 \input{figures/settlement_layer.tex} 49 \end{center} 50 \caption{Blockchain settlement layer with Depolymerization.}\label{fig:offchain} 51 \end{figure} 52 53 GNU Taler exchanges are expected to be operated by regulated payment service 54 providers that can be trusted because they are audited in real-time. Today, 55 no such a regulated entity exists. To nevertheless enable experimentation with 56 the technology, Prof. Benoist is operating an experimental exchange at {\tt 57 https://bitcoin.ice.bfh.ch/} as a research project. While the general 58 public is at liberty to use the system, there is no warranty that the 59 generated Bitcoin Taler coins will be redeemed as the university reserves the 60 right to shut down the system at any time for any reason without enabling 61 users to recover their assets. 62 63 \section{Withdrawing Bitcoin} 64 65 To begin using GNU Taler for Bitcoin payments, users need to install a GNU 66 Taler wallet. Wallets are available from {\tt https://wallet.taler.net/} 67 for various platforms and as extensions for various browsers. We will 68 largely focus on the user experience for the Android wallet, as in most 69 cases the user experience is quite similar for the other implementations. 70 71 \subsection{Adding the Bitcoin exchange} 72 73 The experimental Bitcoin exchange operated by BFH is not in the default list 74 of exchanges supported by a GNU Taler wallet. Thus, users must first add the 75 exchange. To do so, we need to open the ``Settings'' dialog, as shown in 76 Figures~\ref{fig:mainmenu:hamburger} and~\ref{fig:mainmenu:settings}. 77 78 \begin{figure}[h!] 79 \begin{center} 80 \includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210438.png} 81 \end{center} 82 \caption{To withdraw Bitcoin, you must first select the main menu, using the 83 ``hamburger'' icon in the main ``Balances'' view.} 84 \label{fig:mainmenu:hamburger} 85 \end{figure} 86 87 \begin{figure}[h!] 88 \begin{center} 89 \includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210443.png} 90 \end{center} 91 \caption{In the main menu, select ``Settings''.} 92 \label{fig:mainmenu:settings} 93 \end{figure} 94 95 In the ``Settings'' menu, the ``Exchanges'' entry can then be selected 96 to inspect and modify the list of GNU Taler exchanges the wallet is 97 configured to use. To add the BFH exchange, select the ``+'' 98 button and add the respective URL as shown in Figure~\ref{fig:exchange:add}. 99 100 %\begin{figure} 101 %\begin{center} 102 %\includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210448.png} 103 %\end{center} 104 %\caption{In ``Settings'', select ``Exchanges'' to view the list of Taler exchange providers.} 105 %\end{figure} 106 107 \begin{figure}[h!] 108 \begin{center} 109 \includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210513.png} 110 \end{center} 111 \caption{Unless already present, use the ``+'' button to add a Bitcoin exchange. We 112 use {\tt bitcoin.ice.bfh.ch} which is the only Depolymerization operator we are 113 aware of at this time.} 114 \label{fig:exchange:add} 115 \end{figure} 116 117 The Taler shorthand for the ``mainnet'' Bitcoin currency is ``BITCOINBTC'' 118 (instead of just ``BTC''), as the Bitcoin ``testnet'' also uses ``BTC'' and 119 thus the two currencies might be confused, especially given that within 120 GNU Taler, the underlying Bitcoin addresses are not visible. 121 122 %\begin{figure} 123 %\begin{center} 124 %\includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210559.png} 125 %\end{center} 126 %\caption{If done correctly, an exchange for ``BITCOINBTC'' should now be in the list. 127 % GNU Taler uses ``BITCOINBTC'' instead of just ``BTC'' to avoid confusion with 128 % the worthless ``TESTNETBTC''.} 129 %\end{figure} 130 131 \subsection{Adding BITCOINBTC to the Taler wallet} 132 133 To move Bitcoins from a Bitcoin wallet to a Taler wallet, 134 one starts with the menu reachable from the three horizontal dots next to the Bitcoin exchange and selects the 135 ``Withdraw'' operation (Figure~\ref{fig:menu:withdraw}). 136 137 \begin{figure}[h!] 138 \begin{center} 139 \includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210606.png} 140 \end{center} 141 \caption{By clicking the three dots next to the Bitcoin exchange, we get the menu 142 to ``Withdraw'' bitcoins. Here, ``withdraw'' means to transfer BTC from a 143 Bitcoin wallet to a Taler wallet.} 144 \label{fig:menu:withdraw} 145 \end{figure} 146 147 Afterwards, the wallet will ask for the amount of BTC 148 that the user wants to withdraw (Figure~\ref{fig:withdraw:amount}) 149 and ask for the user to agree to the terms of service 150 of the Taler exchange operator. 151 152 \begin{figure}[h!] 153 \begin{center} 154 \includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210626.png} 155 \end{center} 156 \caption{Specify the amount of (BITCOIN)BTC that you want to withdraw.} 157 \label{fig:withdraw:amount} 158 \end{figure} 159 160 GNU Taler exchange operators can also charge transaction fees, 161 just like Bitcoin miners or banks. GNU Taler wallets show 162 applicable fees for every operation before allowing the user 163 to proceed with the transaction. Figure~\ref{fig:withdraw:fees} 164 shows a Taler wallet showing the fees for the withdraw operation. 165 166 \begin{figure}[h!] 167 \begin{center} 168 \includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210653.png} 169 \end{center} 170 \caption{The Taler wallet will show applicable exchange fees before starting the 171 actual process. Note that these fees do not include the on-chain transaction fees of the 172 Bitcoin blockchain.} 173 \label{fig:withdraw:fees} 174 \end{figure} 175 176 After the user agreed to the terms of service and the fees, the wallet 177 internally sets up the withdraw process and shows instructions for how to 178 transfer Bitcoins to the Taler exchange operator to top-up the Taler wallet 179 (Figure~\ref{fig:withdraw:instructions}). The Bitcoin transfer is a bit 180 unusual, as the Deploymerization project encodes the access key of the Taler 181 wallet in two fake Bitcoin addresses, while the actual transfer to the Bitcoin 182 Taler exchange operator happens in a third address. Thus, users need to copy 183 the three lines with amounts and Bitcoin target addresses into their clipboard 184 and from there import them into their Bitcoin wallet (see 185 Figure~\ref{fig:bitcoin:import}). 186 187 \begin{figure}[h!] 188 \begin{center} 189 \includegraphics[width=0.3\textwidth]{Screenshots/Screenshot_20221121-210709.png} 190 \end{center} 191 \caption{This is is the information needed for the Bitcoin wallet to make the 192 on-chain wire transfer to send Bitcoins to your Taler wallet. You should copy 193 this information into your Bitcoin wallet. If the Bitcoin wallet runs on the 194 same device ``Open in banking app'' may work (if the Bitcoin wallet supports it).} 195 \label{fig:withdraw:instructions} 196 \end{figure} 197 198 We will now show how to complete the operation using the Electrum wallet. 199 The first step is to open the Electrum wallet and open the screen to 200 ``Send'' funds (Figure~\ref{fig:electrum:send}). 201 202 \begin{figure}[h!] 203 \begin{center} 204 \includegraphics[width=0.6\textwidth]{Screenshots/ScreenShot-2022-11-22_14.17.37.png} 205 \end{center} 206 \caption{Using your Bitcoin wallet (here: Electrum), you now need to send BTC to 207 the Taler exchange to obtain BITCOINBTC in your Taler wallet.} 208 \label{fig:electrum:send} 209 \end{figure} 210 211 Next, one needs to tell Electrum that the payment will go to multiple 212 recipients. This requires using the ``Pay to many'' option in the 213 menu (Figure~\ref{fig:electrum:many}). 214 215 \begin{figure}[h!] 216 \begin{center} 217 \includegraphics[width=0.3\textwidth]{Screenshots/ScreenShot-2022-11-22_14.17.44.png} 218 \end{center} 219 \caption{When sending the funds, use the ``Pay to many'' option in the menu to be 220 allowed to enter multiple recipients.} 221 \label{fig:electrum:many} 222 \end{figure} 223 224 Once the ``Pay to many'' option has been activated, the three lines from the 225 GNU Taler wallet can be pasted into the address field 226 (Figure~\ref{fig:bitcoin:import}). Electrum expects amounts in mBTC, while 227 the lines generated by GNU Taler used BTC. Hence, all amounts must be 228 multiplied by 1000 and the ``BTC'' unit should be removed. Also, Electrum 229 expects the lines in CSV format, thus commas need to be added between the 230 addresses and the amounts. 231 232 \begin{figure}[h!] 233 \begin{center} 234 \includegraphics[width=0.6\textwidth]{Screenshots/ScreenShot-2022-11-22_14.19.45.png} 235 \end{center} 236 \caption{Now you can import the three destinations that were generated by the GNU Taler 237 wallet. Note that Electrum expects the amounts to be specified in mBTC, while 238 GNU Taler generated the amounts in BTC. 239 Future versions of the Taler wallet may support the Electrum syntax directly.} 240 \label{fig:bitcoin:import} 241 \end{figure} 242 243 The last step is then to confirm the transaction to Electrum 244 and to provide Electrum with the passphrase (Figure~\ref{fig:electrum:pass}). 245 246 \begin{figure}[h!] 247 \begin{center} 248 \includegraphics[width=0.3\textwidth]{Screenshots/ScreenShot-2022-11-22_14.20.32.png} 249 \end{center} 250 \caption{As usual, you need to unlock your Electrum wallet with your passphrase and 251 specify how much you are willing to pay in terms of transaction fees.} 252 \label{fig:electrum:pass} 253 \end{figure} 254 255 Afterwards, Electrum will show a final confirmation screen. Here, the two 234 256 Satoshi transactions are used to encode which Taler wallet should receive the 257 funds, while the main output goes to the Taler exchange to hold the funds in 258 escrow. The fourth output is your remaining balance. It will then take a few 259 hours (or possibly days, if the Bitcoin transaction fee offered was low) for 260 the Bitcoins to arrive at the Taler exchange. During that time, the GNU Taler 261 wallet will show the transaction as ``pending''. Once the Bitcoins have 262 arrived at the Taler exchange operator, the wallet will withdraw the coins and 263 show that the ``withdraw'' operation has completed. 264 265 %\begin{figure} 266 %\begin{center} 267 %\includegraphics[width=0.6\textwidth]{Screenshots/ScreenShot-2022-11-22_14.22.44.png} 268 %\end{center} 269 %\caption{The final transaction should look like this. Here, the two 234 Satoshi transactions 270 % are used to encode which Taler wallet should receive the funds, while the main output goes 271 % to the Taler exchange to hold the funds in escrow. The fourth output is your remaining 272 % balance.} 273 %\end{figure} 274 275 \section{Making Peer-to-Peer payments} 276 277 This section describes how to transact directly between Taler wallets. It is 278 possible to either create a QR code to send money to another wallet, or to 279 create a QR code that allows the recipient to pay the sender. 280 281 \subsection{Sending money} 282 283 To send money, select the ``send funds'' button just next to the current 284 balance (Figure~\ref{fig:p2p:menu}). If a wallet contains multiple currencies, 285 one needs to first select the desired currency. 286 287 \begin{figure}[h!] 288 \begin{center} 289 \includegraphics[width=0.6\textwidth]{Screenshot_2023-06-23-13-35-34-228_net.taler.wallet.jpg} 290 \end{center} 291 \caption{The buttons for peer-to-peer payments are next to the balance on the 292 screen with the transaction history.} 293 \label{fig:p2p:menu} 294 \end{figure} 295 296 Next, the wallet will ask for the amount to send, and ask for the destination 297 (Figure~\ref{fig:p2p:amount}). Sending back ``to a bank account'' will be 298 discussed in Section~\ref{sec:to_chain}, for peer-to-peer payments select ``to 299 another wallet''. 300 301 \begin{figure}[h!] 302 \begin{center} 303 \includegraphics[width=0.6\textwidth]{Screenshot_2023-06-23-13-36-07-426_net.taler.wallet.jpg} 304 \end{center} 305 \caption{Next you will need to specify where to send the funds, and to whom. FIXME: 306 this screen is changing as it will be split into two in the next version!} 307 \label{fig:p2p:amount} 308 \end{figure} 309 310 % The wallet will now show the applicable fees. FIXME: not implemented! 311 312 Finally, a purpose for the transfer must be specified 313 (Figure~\ref{fig:p2p:subject}). This is basically the summary message that 314 will be shown in the transaction history (of both parties) for this 315 transaction. 316 317 \begin{figure}[h!] 318 \begin{center} 319 % FIXME: fees not shown! 320 %\includegraphics[width=0.6\textwidth]{} 321 \end{center} 322 \caption{The buttons for peer-to-peer payments are next to the balance on the 323 screen with the transaction history.} 324 \label{fig:p2p:subject} 325 \end{figure} 326 327 Once all of the information has been specified, the wallet will show a QR code 328 that the recipient must scan to receive the funds. It is also possible to copy 329 the URL encoded in the QR code to the clipboard to exchange it via some secure 330 messaging application. Note that the first person to scan the code or enter 331 the URL will receive the funds. 332 333 To scan the QR code, the recipient must use the QR code button in the bottom 334 right corner of the Taler wallet app. To enter a URL or paste one from a 335 clipboard, hold the QR code button to get to the ``Enter Taler URI'' dialog 336 (Figure~\ref{fig:qr:entry}). 337 338 \begin{figure}[h!] 339 \begin{center} 340 %\includegraphics[width=0.6\textwidth]{} 341 \end{center} 342 \caption{Entering a Taler payment URL into the Android wallet requires briefly 343 holding the QR code button.} 344 \label{fig:qr:entry} 345 \end{figure} 346 347 After scanning the QR code or pasting the URL the wallet will show the 348 purpose and amount of the payment and allow the user to confirm the action 349 before proceeding. 350 351 % FIXME: fees not shown! 352 \begin{figure}[h!] 353 \begin{center} 354 %\includegraphics[width=0.6\textwidth]{} 355 \end{center} 356 \caption{Entering a Taler payment URL into the Android wallet requires briefly 357 holding the QR code button.} 358 \label{fig:qr:accept} 359 \end{figure} 360 361 362 \subsection{Sending invoices} 363 364 To send money, select the ``receive funds'' button just next to the current 365 balance (Figure~\ref{fig:p2p:menu}). The remaining dialogs mirror the 366 process for sending money, except that this time the direction of the 367 transfer is reversed. 368 369 % FIXME: expand once we have invoice attestation! 370 371 \section{Paying Taler-enabled merchants} 372 373 The GNU Taler merchant backend makes it easy to accept GNU Taler payments as 374 part of an e-commerce site or at a point-of-sale. In contrast to the 375 peer-to-peer payments described above, accepting payments with the merchant 376 backend always results in the money being transfer to the merchant using the 377 real-time gross settlement (RTGS) layer underpinning transactions in the 378 currency. In case of Bitcoin, this means that the merchant will always receive 379 the money on-chain in their Bitcoin wallet as a UTXO. 380 381 \subsection{Payment aggregation} 382 383 As on-chain (or even traditional banking RTGS) transactions are expensive, 384 the GNU Taler exchange does not trigger such a transfer for each GNU Taler 385 transaction, but only at a frequency determined by the merchant backend. 386 Three settings primarily affect when such a transfer will happen: 387 \begin{itemize} 388 \item The wire transfer fee set by the exchange. As the transfer is expensive, 389 the exchange charges a fee, but will not execute transfers if the fee is 390 larger than the amount to be transferred. 391 \item The refund deadline. GNU Taler allows a merchant to give a customer a 392 refund until the refund deadline, which is part of the contract between 393 customer and merchant. As refunds are not possible after the exchange 394 has send the money to the merchant, any transfers to the merchant happen 395 {\bf after the refund deadline} set by the merchant in the contract. 396 \item The wire deadline. The wire deadline must be after the refund deadline 397 and specifies the latest time by which the merchant wants to receive the 398 funds. Thus, the exchange will execute the transfer {\bf before the wire deadline}. 399 \end{itemize} 400 401 When any outstanding payment hits the wire deadline, the exchange will 402 sum up all other payments to the same merchant that are past the refund 403 deadline and wire the total amount (minus the wire fee) to the merchant. 404 405 406 \subsection{Configuring the merchant backend} 407 408 To setup a merchant backend, you first need to install the {\tt 409 taler-merchant-httpd} backend. This is described for various platforms in 410 the GNU Taler merchant 411 manual.\footnote{\url{https://docs.taler.net/taler-merchant-manual.html}} 412 To configure the system for Bitcoin, you need to set the currency: 413 \begin{verbatim} 414 $ taler-config -s TALER -o CURRENCY -V BITCOINBTC 415 \end{verbatim} 416 Furthermore, you need to tell the backend to trust the respective 417 exchange: 418 \begin{verbatim} 419 $ taler-config -s merchant-exchange-benoist \ 420 -o CURRENCY -V BITCOINBTC 421 $ taler-config -s merchant-exchange-benoist \ 422 -o EXCHANGE_BASE_URL -V https://bitcoin.ice.bfh.ch/ 423 $ taler-config -s merchant-exchange-benoist \ 424 -o MASTER_KEY -V YCWD4QXP607YDZ47NF40MZ6BNMKNFKPECD6JYMTTMTAANZ6C7W00 425 \end{verbatim} 426 427 It is possible to support multiple exchanges in the same currency by varying 428 the section name, as long as the section prefix is ``merchant-exchange-''. 429 430 \begin{figure}[h!] 431 \begin{center} 432 %\includegraphics[width=0.6\textwidth]{} 433 \end{center} 434 \caption{The Taler Backoffice application with the page to configure 435 the key settings for an e-commerce site or point-of-sale.} 436 \label{fig:spa:settings} 437 \end{figure} 438 439 Assuming everything else was setup correctly, the rest of the configuration 440 can be done with the browser (Figure~\ref{fig:spa:settings}). Configuring the 441 instance under ``Settings'' should be largely straightforward. The only 442 special setting is that under ``Bank account'' you need to specify ``bitcoin'' 443 as the ``Target type'' and enter your Bitcoin wallet address under 444 ``Address''. The ``Name'' should be set to a human-readable identifier of the 445 owner of the wallet; however, it is not checked or used in the on-chain 446 transfer. 447 448 The ``Default max deposit fee'' refers to the exchange's per-coin deposit 449 fees. The merchant backend will agree to pay up to this amount in fees for 450 any transaction. This is, however, merely a default: the frontend can override 451 the deposit fee the merchant is willing to cover each time it creates an 452 order. If the actual deposit fees are higher, the customer will be asked to 453 cover the excess deposit fees. 454 455 The ``Default max wire fee'' is not a hard cap on the wire fee to be paid to 456 the exchange. Instead, if the wire fee charged by the exchange is higher, the 457 merchant backend will ask the customer to cover a fraction of the excess fee, 458 as determined by the ``Default wire fee amortization'' setting. 459 460 The ``Default wire transfer delay'' corresponds to the ``Wire deadline'' 461 mentioned above. If a specific contract from the frontend does not include a 462 ``Wire deadline'' the ``Wire deadline'' will be automatically set to the 463 current time plus the ``Default wire transfer delay'' by the merchant backend. 464 465 \subsection{Creating an order} 466 467 You can setup a new order using the backend Web interface or using the GNU 468 Taler merchant REST 469 API.\footnote{\url{https://docs.taler.net/core/api-merchant.html}} The GNU 470 Taler Merchant API 471 tutorial\footnote{\url{https://docs.taler.net/taler-merchant-api-tutorial.html}} 472 provides a tutorial for using the REST API. Here we will just use the backend 473 Web interface. Select the ``Orders'' tab to get a list of the current set of 474 orders for this merchant. Clicking on the blue ``+'' icon launches the dialog 475 for setting up a new order (Figure~\ref{fig:spa:order}). 476 477 \begin{figure}[h!] 478 \begin{center} 479 %\includegraphics[width=0.6\textwidth]{} 480 \end{center} 481 \caption{The Taler Backoffice application with the page to configure 482 the key settings for an e-commerce site or point-of-sale.} 483 \label{fig:spa:order} 484 \end{figure} 485 486 Only the order price and a human-readable summary to be shown to the buyer are 487 required. Once an order has been created it will appear in the order 488 list. Clicking on it will show the order details. To get a customer to pay for 489 it, you can either redirect the user to the ``Order status URL'' given on that 490 page, or pass the ``Payment URL'' to the wallet (e.g. via clipboard, NFC or QR 491 code). Naturally, in practice, the e-commerce frontend or point-of-sale 492 system would use the REST API to automatically setup an order and hand the 493 resulting URL to the customer's wallet. 494 495 496 \subsection{Making the payment} 497 498 From the user's perspective, paying a Taler-enabled merchant is very similar 499 to paying a peer-to-peer invoice, in that the user needs to scan the QR code, 500 check the amount and purpose of the payment, and hit the confirm button. With 501 the WebExtension wallet, the process can be even further simplified: after 502 granting the wallet the permission to ``Automatically open wallet based on 503 page content'' in the settings, Web pages can directly transition into the 504 wallet payment dialog without ever showing a QR code or asking the user to 505 explicitly open the Taler wallet. Note that it is also possible to make 506 payments on Web sites opened in a browser on a desktop with a mobile wallet 507 running on a different device. 508 509 \section{Going back onto the chain} \label{sec:to_chain} 510 511 Last but not least, it is possible to transfer the BITCOINBTC from the Taler 512 wallet back to a Bitcoin wallet, effectively moving the funds out of the Taler 513 payment system and back onto the chain. 514 515 The process is started via the ``send funds'' button next to the current 516 balance (Figure~\ref{fig:p2p:menu}). When the wallet asks for the amount to 517 send and the destination (Figure~\ref{fig:p2p:amount}, sending the money to a 518 Bitcoin wallet corresponds to the ``to a bank account'' action, as in Bitcoin, 519 the equivalent of a bank account is an actual native Bitcoin wallet. 520 521 % FIXME: maybe change text shown for bitcoin? 522 % FIXME: current Android wallet dialog for sending funds back onto chain is broken! 523 524 525 \section{Future work} 526 527 In the future, GNU Taler could be combined with technologies like the 528 Lightning~\cite{lightening} network to create a federation of GNU Taler 529 exchanges. This would likely address open challenges for Lightening in terms 530 of scalability and availability. The main work required here is to add 531 support for federation to the GNU Taler payment system. 532 533 \section{Future work} 534 535 As described, the current system requires trust in the Taler exchange 536 operator. In banking, this trust is usually established by the operator being 537 a regulated entity. However, the existing system is NOT supervised by any 538 regulator and there is no depost insurance.\footnote{More specifically, the 539 deployment is a research prototype and all funds sent to the exchange are 540 considered to be a donation to the research group. The research group may use 541 the funds to make payments to third parties as specified above, or terminate 542 the system at any time for any reason. Specifically, holders of the respective 543 coins do not have a legal rights to any funds held by the research group.} 544 545 While possible with GNU Taler, the existing system does not perform any kind 546 of KYC or AML checks. As pointed out in our paper~\cite{depo2022}, the 547 non-fungible nature of Bitcoin creates challenges for any regulated operator. 548 Future business and legal work is required to overcome these challenges if 549 this type of system were to be operated commercially. 550 551 \section{Conclusion} 552 553 We have described how GNU Taler can be used as a layer-2 solution on top of 554 Bitcoin to facilitate inexpensive and virtually instant transactions, both 555 between GNU Taler wallets and between customer wallets and merchants. The 556 system supports the use of cryptographically secured microtransactions 557 off-chain with large transactions on-chain when withdrawing or paying out to 558 merchants. 559 560 561 \bibliographystyle{alpha} 562 \bibliography{taler,ui} 563 564 \end{document}