summaryrefslogtreecommitdiff
path: root/libeufin/regional-manual.rst
diff options
context:
space:
mode:
Diffstat (limited to 'libeufin/regional-manual.rst')
-rw-r--r--libeufin/regional-manual.rst482
1 files changed, 0 insertions, 482 deletions
diff --git a/libeufin/regional-manual.rst b/libeufin/regional-manual.rst
deleted file mode 100644
index e497e8c9..00000000
--- a/libeufin/regional-manual.rst
+++ /dev/null
@@ -1,482 +0,0 @@
-.. target audience: operator
-
-Regional Currency Setup Manual
-##############################
-
-In this manual, we explain how we model a regional currency and
-how to set up one using GNU Taler and LibEuFin technology.
-
-.. contents:: Table of Contents
-
-
-How to create/destroy regional currency
-=======================================
-
-In this model, the regional currency is backed by the fiat currency and users are
-offered two operations: *cash-in* to create regional currency starting from the fiat,
-and *cash-out* to destroy regional currency and obtain fiat currency back.
-
-The example below assumes that one single unit of regional currency is always backed
-by one single unit of fiat currency.
-
-Cash-in
-+++++++
-
-One fundamental entity to create the regional currency is the *master bank account*.
-The master bank account is hosted at one fiat bank and whenever it receives a *valid*
-fiat payment of N units, it triggers the creation of N units of regional currency.
-Such trigger causes the *admin bank account* at the regional bank to wire the N units of
-regional currency to the Taler exchange (regional) bank account. At this point, the
-Taler exchange is ready to issue the regional coins to the Taler wallet that proves
-to own them. Note: *valid* fiat payments are those with a Taler-relevant subject that
-should be generated by a Taler wallet.
-
-Cash-out
-++++++++
-
-Once a regional bank user confirms a cash-out operation of N units, the system sends
-a regional payment of N units to the *admin bank account*. This latter triggers then
-a fiat payment of N units to the fiat bank account owned by the user who initiated the
-cash-out.
-
-How are GNU Taler & LibEuFin used to create the regional currency?
-==================================================================
-
-Following are the main components to operate a regional currency based
-on GNU Taler and LibEuFin technology.
-
-- LibEuFin Nexus: is responsible to drive the master (fiat) bank account both to learn
- about incoming payments and to send fiat cash-out payments
-- LibEuFin Bank: offers basic banking operations, e.g. wire transfers, Taler withdrawals,
- account management, cash-out's
-- Taler exchange: server side of Taler operations.
-- Taler wallet: client side of Taler operations.
-- Taler merchant backend: abstracts Taler details to the shops.
-
-
-Guided basic setup
-==================
-
-Prerequisites
-+++++++++++++
-
-For this manual, we assume that the system is deployed on a contemporary
-Debian GNU/Linux or Ubuntu LTS system using the binary packages provided.
-Furthermore, you should run the process on a system with one or more globally
-reachable IP address(es) *and* with various DNS names already pointing to
-these IPs.
-
-To further simplify the process, we suggest to use (or at least study) the
-automatic deployment scripts provided in the ``deployment.git`` Git repository
-in the ``regional-currency/`` folder.
-
-
-Obtaining the scripts
-+++++++++++++++++++++
-
-First, download the deployment scripts via Git:
-
-.. code-block:: console
-
- $ git clone git://git.taler.net/deployment
-
-Guided Configuration
-++++++++++++++++++++
-
-This approach sets up a regional currency with cash-in/-out rates of 1:1.
-
-Navigate into the *regional-currency/* directory, and as **root** run:
-
-.. code-block:: console
-
- # ./main.sh
-
-The script will start by asking you fundamental questions about the
-desired setup, in particular:
-
- * The name of the regional currency. It must have 3 to 11 letters.
- Currently only 'NETZBON' is supported.
- * The ISO code of the fiat currency. Currently only 'CHF' is supported.
- * The name of the regional currency bank. It will be shown to business
- users when they interact with the system.
- * Whether to use TLS or not. You should answer ``y`` in most cases.
- * Whether to run taler-exchange-offline. Unless you need a high-security
- setup and expect to run an offline key management process, say ``y``.
- If you say ``n``, you will need to run ``taler-exchange-offline setup``
- on your offline system and provide the master public key. Furthermore,
- you should then study the exchange manual on offline key management to
- finish the exchange setup process later.
- * The admin password for the bank. Be absolutely sure to enter a very,
- very long and high-entropy password, preferably use the autogenerated one.
- * The DNS domain name of your setup (i.e: domain.tld). The installer will
- create by itself all the needed subdomains for your domain name,
- as (``bank.$DOMAIN``, ``exchange.$DOMAIN`` and ``backend.$DOMAIN``).
- But, these subdomain names, must have been added beforehand to your
- DNS domain control panel, and they must be pointing to the
- IP address of the system on which you are running the
- installation (before you execute the installer)).
-
-The information you entered as well as the generated bank admin password will be stored in a file called ``config/user.conf``.
-Should you run the script in the future (for example, to upgrade the installation),
-you will not be asked these questions a second time.
-
-After answering all of the questions, the actual installation will start. The
-scripts will download and configure various packages, which may take some time.
-Grab a coffee.
-
-.. note::
-
- At this point, the setup is NOT connected to any fiat bank account!
-
-Connecting to a Fiat Bank
-=========================
-
-Some regional currencies are backed by assets in a fiat currency and allow users
-to convert fiat currency into the regional currency (``cash in``) and to convert
-regional currency into fiat currency (``cash out``). Restrictions, exchange rates
-and fees may apply to these conversions. This section explains how to setup LibEuFin
-Nexus to communicate with the fiat bank account that backs the regional currency.
-
-Prerequisites
-+++++++++++++
-
-You must have a bank account at a bank dealing in fiat currency that offers an
-online banking protocol supported by LibEuFin Nexus. As legacy transactions
-in that bank account would likely confuse the system, it is highly advised to
-use a fresh bank account, with an empty transaction history.
-
-Today, the LibEuFin implementation supports EBICS 2.5 and 3.0 and has been
-tested with the Postfinance (CHF). Please note that banks tend to have their
-own dialects of finance messages and thus other retail banks may or may not work.
-Contact us if you need support for another bank or core banking protocol.
-
-EBICS setup
-+++++++++++
-
-.. include:: ../frags/ebics-setup.rst
-
-.. note::
-
- For debug setups where the cash-ins are simulated :ref:`this way <withdraw-simulation>`,
- this step can be entirely skipped.
-
-
-Enable regional currency conversion
-===================================
-
-Prerequisites
--------------
-
-This step assumes that you already have a working regional currency bank
-and have successfully connected to a backing fiat bank account.
-Follow the instructions from :ref:`EBICS subscriber setup <ebics-setup>`.
-
-Configuration
--------------
-
-Then you have to enable conversion and at least one TAN channel for cashout in the configuration file.
-
-.. code-block:: ini
-
- [libeufin-bank]
- ALLOW_CONVERSION = YES
- FIAT_CURRENCY = EUR
-
- TAN_SMS = libeufin-tan-sms.sh
- # And/Or
- TAN_EMAIL = libeufin-tan-email.sh
-
-
-You must have an exchange account with username ``exchange`` for conversion to work.
-Assuming that the configuration file exists at ``$config_file``, the following
-command would create one:
-
-.. code-block:: console
-
- libeufin-bank create-account '{"username":"exchange","password":"password","name":"Cashout Exchange","is_taler_exchange":true}' -c $config_file
-
-Then the following command would start the server with conversion API enabled :
-
-.. code-block:: console
-
- libeufin-bank serve -c $config_file
-
-Web-based Configuration
------------------------
-
-Now you should be able to setup conversion rates and ``admin`` debt limit though the Web
-interface of the bank as the ``admin`` user.
-
-Conversion ON!
---------------
-
-The last step is to run Nexus to import incoming bank
-transactions (cash in) and to trigger outgoing bank transactions (cash out).
-Refers to ``nexus-manual.conf`` for more details.
-
-
-
-Configuring the merchant
-========================
-
-In order to setup a shop, you need a merchant backend to run. The guided setup
-installs and sets one backend up, but the user is required to complete the shop
-configuration via the Web browser.
-
-One fundamental piece of information are the banking details, to allow merchant
-receive payments from the exchange. If you don't have a bank account at the regional
-bank, contact the administrator and get one. After being able to login to the new
-bank account, you can see your IBAN by clicking on the ``Welcome, $USERNAME`` message
-in the profile page. The IBAN is shown under the ``Internal IBAN`` box.
-
-Next, point your browser to ``$proto://backend.$domain_name/``. You should
-be welcomed by the following merchant backoffice page:
-
-.. image:: merchant_first_login.png
-
-Such page offers to create a merchant profile: fill any required field (including
-your access token) and click to ``confirm``. It should now be possible to associate
-the banking details to the profile just created: click to ``Bank account`` at the
-left of the page. The following page should be shown:
-
-.. image:: no_default_account_yet.png
-
-Click on the blue "+" sign on the top right of the page, and expect the following
-page to appear:
-
-.. image:: enter_instance_details.png
-
-This tutorial is focused on IBAN, so choose ``iban`` as the account type, and
-expect the following page to appear:
-
-.. image:: instance_iban_config.png
-
-After providing the details and confirming, the shop is ready to generate orders
-and accept payments.
-
-Make an order
-+++++++++++++
-
-Click on ``Orders`` at the top left corner of the merchant backoffice page; the
-following page should appear
-
-.. image:: create_orders.png
-
-After having filled the required fields, the interface should show the following
-page with the related links to check the status of the order and let wallets pay
-for it. Take note of the link beside ``Payment URI`` (we'll call it ``$payUri``).
-
-.. image:: payment_links.png
-
-In order to test the setup, it should be now possible to use the command line wallet
-to withdraw Taler coins and spend them to buy the order we just created.
-
-.. _withdraw-simulation:
-
-Pay for the order
-+++++++++++++++++
-
-This section explains how to pay for the order in a scenario where the fiat bank
-is simulated. The simulation takes place by crafting ad-hoc XML files as if the
-bank would have issued them. Such XML files carry information about incoming payments
-to the regional currency master bank account. Finally, the XML files are passed
-to LibEuFin nexus via a convenient CLI method. The responsible script for such
-simulation is ``withdraw.sh``.
-
-Run ``./withdraw.sh`` without any arguments. Assuming that you ran the command
-as the ``test-user``, after the execution, 5 units of the regional currency should
-be found in the CLI wallet owned by ``test-user``.
-
-
-Check it with:
-
-.. code-block:: console
-
- $ taler-wallet-cli balance
-
-If so, call the wallet in the following way to finally pay for the order just created:
-
-.. code-block:: console
-
- $ taler-wallet-cli handle-uri $payUri
-
-.. note::
-
- Reset the state before going to production, as it impacts the way nexus
- asks records to the bank. In particular, delete: any database and the
- files ``config/user.conf`` and ``config/internal.conf``, and finally run
- ``./main.sh`` again.
-
-
-Exchange-wallet integration
-===========================
-
-Although not strictly needed to start withdrawing regional money, this
-section explain how to enable the tight integration between Taler exchange
-and wallet, to let wallets learn about the possibility of withdrawing
-regional funds via a particular exchange.
-
-First, you need to use the ``taler-exchange-offline`` tool to inform the
-exchange about the fiat bank account that can be used for cash in operations
-and also specify the URL for currency conversion. Additionally, you may also
-configure restrictions on the bank accounts that may originate the funds, for
-example to prevent international wire transfers that may expose you to
-additional compliance risks.
-
-Given the ``$IBAN`` of the fiat currency bank account and ``$NAME`` as
-the (URL-encoded) name of the exchange-account owner, the following
-``taler-exchange-offline`` invocation can be used to notify wallets about
-the possibility of currency conversion (cash in):
-
-.. code-block:: console
-
- # taler-exchange-offline \
- enable-account \
- payto://iban/$IBAN?receiver-name=$NAME \
- conversion-url "$CONVERSION_URL" \
- upload
-
-Here, the ``$CONVERSION_URL`` must be set to the base URL of the conversion
-endpoint of the bank, which should be ``https://bank.$DOMAIN/conversion-info/``
-in our setup.
-
-Wallet setup
-============
-
-This section describes the interaction between the Taler graphical wallet (Android,
-iOS, WebExtensions) and the regional currency system.
-
-You need to add your regional currency exchange to the wallet. This can
-be done by scanning a QR code with a ``taler://withdraw-exchange/exchange.$DOMAIN``
-URL or by manually entering the URL into the respective ``Add exchange``
-dialogue.
-
-After starting the withdraw process and specifying the desired amount, the wallet
-should show you the details of the fiat wire transfer that must be made for the cash
-in to be completed. Once the money has arrived at the fiat bank account, Nexus will
-obtain the transaction data and the regional currency bank will create the
-corresponding amount in regional currency, crediting the GNU Taler exchange account.
-In turn, the exchange will issue the respective amount to your wallet.
-
-For testing, you should be able to *deposit* regional currency directly
-into your LibEuFin Bank account from the Taler wallet. Note: the wallet relies on the
-exchange to perform such deposit. So once the exchange has credited the regional
-currency account to your account and assuming the cash out rules are satisfied, you
-should then be able to start a cash out operation.
-
-..
- FIXME: uncomment once tested.
-
- Enable regional currency conversion
- ===================================
-
- Prerequisites
- +++++++++++++
-
- This step assumes that you already have a working regional currency bank
- and have successfully connected to a backing fiat bank account.
-
- Additionally, for each account that is allowed to convert regional currency
- into fiat, you must configure the (fiat) bank account number of the fiat
- currency with the respective account profile. Only the bank ``admin`` is
- allowed to set fiat bank account numbers.
-
- Furthermore, to achieve a reasonable security level, you must enable two
- factor authentication for "cash out" transactions. This requires you to
- configure an e-mail address or phone number for every account that supports
- "cash out" transactions --- and to setup your system for sending e-mails or
- SMS. This manual does not cover setting up e-mail. For SMS delivery, you will
- need to obtain credentials from an SMS provider and provide a script to send
- messages via such a provider.
-
- Configuration
- +++++++++++++
-
- You have to enable conversion and at least one TAN channel for cashout in the
- ``/etc/libeufin/libeufin-bank.conf`` configuration file:
-
- .. code-block:: console
-
- [libeufin-bank]
- ALLOW_CONVERSION = yes
- FIAT_CURRENCY = EUR
-
- TAN_SMS = libeufin-tan-sms.sh
- # And/Or
- TAN_EMAIL = libeufin-tan-email.sh
-
- Afterwards, restart the bank:
-
- .. code-block:: console
-
- # systemctl restart libeufin-bank
-
-
- The scripts TAN_SMS/EMAIL must accept the phone number / e-mail address
- as the ``$1`` parameter and the content in their standard input. The LibEuFin
- repository offers them in ``contrib/``: adjust to your setup!
-
- .. note::
-
- the TAN_SMS script relies on a Telesign account. For this reason,
- it needs a telesign-secret file found in the PATH, that defines the
- environment variables API_KEY and CUSTOMER_ID
-
- Web-based Configuration
- +++++++++++++++++++++++
-
- Now you should be able to setup conversion rates and ``admin`` debt limit though the Web
- interface of the bank as the ``admin`` user.
-
-
- Conversion ON!
- ++++++++++++++
-
- The last step is to enable the Nexus services to import incoming bank
- transactions (cash in) and to trigger outgoing bank transactions (cash out):
-
- .. code-block:: console
-
- # systemd enable --now libeufin-nexus-ebics-fetch
- # systemd enable --now libeufin-nexus-ebics-submit
-
- Going live!
- ===========
-
- Exchange setup
- ++++++++++++++
-
- First, you need to use the ``taler-exchange-offline`` tool to inform the
- exchange about the fiat bank account that can be used for cash in operations
- and also specify the URL for currency conversion. Additionally, you may also
- configure restrictions on the bank accounts that may originate the funds, for
- example to prevent international wire transfers that may expose you to
- additional compliance risks.
-
- Given the ``$IBAN`` of the fiat currency bank account and ``$NAME`` as
- the (URL-encoded) name of the exchange-account owner, the following
- ``taler-exchange-offline`` invocation can be used to inform wallets about
- the possibility of currency conversion (cash in) when wallets download
- ``/keys`` with bank account data from the exchange:
-
- .. code-block:: console
-
- # taler-exchange-offline \
- enable-account \
- payto://iban/$IBAN?receiver-name=$NAME \
- conversion-url "$CONVERSION_URL" \
- upload
-
- Here, the ``$CONVERSION_URL`` must be set to the base URL of the conversion
- endpoint of the bank, which should be ``https://bank.$DOMAIN/conversion-info/``
- in our setup.
-
-Podman deployment
-=================
-
-The Podman-based deployment installs, configures, and launches any Taler and
-LibEuFin service with the aim of serving a regional currency.
-
-Please clone ``git://git.taler.net/deployment`` and checkout the ``regio``
-branch. Navigate to the ``sandcastle-ng`` directory and read the README file:
-it should guide you through all the steps to running the regional currency.