gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-wallet-webex] 01/02: store sender wire info in separ


From: gnunet
Subject: [GNUnet-SVN] [taler-wallet-webex] 01/02: store sender wire info in separate store
Date: Thu, 04 Jan 2018 11:35:12 +0100

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-webex.

commit 02b4a2ad6208c3b70a4a194b4c763a4e4334cdc1
Author: Florian Dold <address@hidden>
AuthorDate: Thu Jan 4 11:08:39 2018 +0100

    store sender wire info in separate store
---
 src/dbTypes.ts                   |  17 ++++++
 src/helpers.ts                   |  14 +++++
 src/i18n/de.po                   | 113 ++++++++++++++++++++-------------------
 src/i18n/en-US.po                | 113 ++++++++++++++++++++-------------------
 src/i18n/fr.po                   | 113 ++++++++++++++++++++-------------------
 src/i18n/it.po                   | 113 ++++++++++++++++++++-------------------
 src/i18n/strings.ts              |   8 +--
 src/i18n/taler-wallet-webex.pot  | 113 ++++++++++++++++++++-------------------
 src/talerTypes.ts                |  13 +++++
 src/wallet.ts                    |  41 ++++++++++----
 src/walletTypes.ts               |   2 +-
 src/webex/pages/return-coins.tsx |   2 +-
 12 files changed, 365 insertions(+), 297 deletions(-)

diff --git a/src/dbTypes.ts b/src/dbTypes.ts
index e0adb6fc..264f81dd 100644
--- a/src/dbTypes.ts
+++ b/src/dbTypes.ts
@@ -34,6 +34,7 @@ import {
   PayReq,
   RefundPermission,
   TipResponse,
+  WireDetail,
 } from "./talerTypes";
 
 
@@ -809,3 +810,19 @@ export interface PurchaseRecord {
    */
   timestamp_refund: number;
 }
+
+
+/**
+ * Information about wire information for bank accounts we withdrew coins from.
+ */
+export interface SenderWireRecord {
+  /**
+   * Wire details.
+   */
+  senderWire: WireDetail;
+
+  /**
+   * Identifier, hash code of canonicalized senderWire.
+   */
+  id: number;
+}
diff --git a/src/helpers.ts b/src/helpers.ts
index d85808ac..42863c65 100644
--- a/src/helpers.ts
+++ b/src/helpers.ts
@@ -138,3 +138,17 @@ export function getTalerStampDate(stamp: string): Date | 
null {
   return new Date(sec * 1000);
 }
 
+export function hash(val: any): number {
+  const str = canonicalJson(val);
+  // https://github.com/darkskyapp/string-hash
+  let h = 5381;
+  let i = str.length;
+  while (i) {
+    h = (h * 33) ^ str.charCodeAt(--i);
+  }
+
+  /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed
+  * integers. Since we want the results to be always positive, convert the
+  * signed int to an unsigned by doing an unsigned bitshift. */
+  return h >>> 0;
+}
diff --git a/src/i18n/de.po b/src/i18n/de.po
index 49b7ada8..21ff8dfe 100644
--- a/src/i18n/de.po
+++ b/src/i18n/de.po
@@ -27,28 +27,28 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/webex/pages/confirm-contract.tsx:70
+#: src/webex/pages/confirm-contract.tsx:73
 #, c-format
 msgid "show more details\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:84
+#: src/webex/pages/confirm-contract.tsx:87
 #, c-format
 msgid "Accepted exchanges:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:89
+#: src/webex/pages/confirm-contract.tsx:92
 #, c-format
 msgid "Exchanges in the wallet:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:156
+#: src/webex/pages/confirm-contract.tsx:159
 #, c-format
 msgid "You have insufficient funds of the requested currency in your wallet."
 msgstr ""
 
 #. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:158
+#: src/webex/pages/confirm-contract.tsx:161
 #, c-format
 msgid ""
 "You do not have any funds from an exchange that is accepted by this "
@@ -56,37 +56,37 @@ msgid ""
 "wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:214
+#: src/webex/pages/confirm-contract.tsx:217
 #, c-format
 msgid "The merchant%1$s offers you to purchase:\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:235
+#: src/webex/pages/confirm-contract.tsx:238
 #, fuzzy, c-format
 msgid "Confirm payment"
 msgstr "Bezahlung bestätigen"
 
-#: src/webex/pages/confirm-create-reserve.tsx:121
+#: src/webex/pages/confirm-create-reserve.tsx:126
 #, c-format
 msgid "Select"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:137
+#: src/webex/pages/confirm-create-reserve.tsx:142
 #, c-format
 msgid "Error: URL may not be relative"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:205
+#: src/webex/pages/confirm-create-reserve.tsx:210
 #, c-format
 msgid "The exchange is trusted by the wallet.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:211
+#: src/webex/pages/confirm-create-reserve.tsx:216
 #, c-format
 msgid "The exchange is audited by a trusted auditor.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:217
+#: src/webex/pages/confirm-create-reserve.tsx:222
 #, c-format
 msgid ""
 "Warning:  The exchange is neither directly trusted nor audited by a trusted "
@@ -94,7 +94,7 @@ msgid ""
 "If you withdraw from this exchange, it will be trusted in the future.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:226
+#: src/webex/pages/confirm-create-reserve.tsx:231
 #, c-format
 msgid ""
 "Using exchange provider%1$s.\n"
@@ -102,135 +102,135 @@ msgid ""
 " %2$s in fees.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:240
+#: src/webex/pages/confirm-create-reserve.tsx:245
 #, c-format
 msgid ""
 "Waiting for a response from\n"
 " %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:257
+#: src/webex/pages/confirm-create-reserve.tsx:262
 #, c-format
 msgid ""
 "Information about fees will be available when an exchange provider is "
 "selected."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:300
+#: src/webex/pages/confirm-create-reserve.tsx:307
 #, c-format
 msgid "Accept fees and withdraw"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:305
+#: src/webex/pages/confirm-create-reserve.tsx:312
 #, c-format
 msgid "Change Exchange Provider"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:357
+#: src/webex/pages/confirm-create-reserve.tsx:364
 #, c-format
 msgid "You are about to withdraw %1$s from your bank account into your wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:442
+#: src/webex/pages/confirm-create-reserve.tsx:449
 #, c-format
 msgid ""
 "Oops, something went wrong. The wallet responded with error status (%1$s)."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:451
+#: src/webex/pages/confirm-create-reserve.tsx:458
 #, c-format
 msgid "Checking URL, please wait ..."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:465
+#: src/webex/pages/confirm-create-reserve.tsx:472
 #, c-format
 msgid "Can't parse amount: %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:472
+#: src/webex/pages/confirm-create-reserve.tsx:479
 #, c-format
 msgid "Can't parse wire_types: %1$s"
 msgstr ""
 
 #. #-#-#-#-#  - (PACKAGE VERSION)  #-#-#-#-#
 #. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:498 src/webex/pages/tip.tsx:148
+#: src/webex/pages/confirm-create-reserve.tsx:505 src/webex/pages/tip.tsx:155
 #, c-format
 msgid "Fatal error: \"%1$s\"."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:162
 #, c-format
 msgid "Balance"
 msgstr "Saldo"
 
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:165
 #, c-format
 msgid "History"
 msgstr "Verlauf"
 
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:168
 #, c-format
 msgid "Debug"
 msgstr "Debug"
 
-#: src/webex/pages/popup.tsx:246
+#: src/webex/pages/popup.tsx:248
 #, c-format
 msgid "help"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:251
+#: src/webex/pages/popup.tsx:253
 #, fuzzy, c-format
 msgid ""
 "You have no balance to show. Need some\n"
 " %1$s getting started?\n"
 msgstr "Sie haben kein Digitalgeld. Wollen Sie %1$s? abheben?"
 
-#: src/webex/pages/popup.tsx:268
+#: src/webex/pages/popup.tsx:270
 #, c-format
 msgid "%1$s incoming\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:281
+#: src/webex/pages/popup.tsx:283
 #, c-format
 msgid "%1$s being spent\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:307
+#: src/webex/pages/popup.tsx:309
 #, c-format
 msgid "Error: could not retrieve balance information."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:334
+#: src/webex/pages/popup.tsx:336
 #, c-format
 msgid "Payback"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:335
+#: src/webex/pages/popup.tsx:337
 #, c-format
 msgid "Return Electronic Cash to Bank Account"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:338
 #, c-format
 msgid "Manage Trusted Auditors and Exchanges"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:348
+#: src/webex/pages/popup.tsx:350
 #, fuzzy, c-format
 msgid ""
 "Bank requested reserve (%1$s) for\n"
 " %2$s.\n"
 msgstr "Bank bestätig anlegen der Reserve (%1$s) bei %2$s"
 
-#: src/webex/pages/popup.tsx:358
+#: src/webex/pages/popup.tsx:360
 #, fuzzy, c-format
 msgid ""
 "Started to withdraw\n"
 " %1$s%2$sfrom%3$s(%4$s).\n"
 msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
 
-#: src/webex/pages/popup.tsx:367
+#: src/webex/pages/popup.tsx:369
 #, fuzzy, c-format
 msgid "Merchant%1$soffered%2$scontract%3$s.\n"
 msgstr ""
@@ -238,99 +238,100 @@ msgstr ""
 "               möchte einen Vertrag über %2$s\n"
 "               mit Ihnen abschließen."
 
-#: src/webex/pages/popup.tsx:378
+#: src/webex/pages/popup.tsx:380
 #, fuzzy, c-format
 msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
 msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
 
-#: src/webex/pages/popup.tsx:388
+#: src/webex/pages/popup.tsx:390
 #, fuzzy, c-format
 msgid ""
 "Paid%1$sto merchant%2$s.\n"
 "%3$s(%4$s)\n"
 msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
 
-#: src/webex/pages/popup.tsx:398
+#: src/webex/pages/popup.tsx:400
 #, c-format
 msgid "Merchant%1$sgave a refund over%2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:408
+#: src/webex/pages/popup.tsx:410
 #, fuzzy, c-format
 msgid ""
-"Merchant%1$sgave a%2$sof%3$s.\n"
+"Merchant%1$sgave\n"
+"a%2$sof%3$s.\n"
 "%4$s%5$s"
 msgstr ""
 "%1$s\n"
 "               möchte einen Vertrag über %2$s\n"
 "               mit Ihnen abschließen."
 
-#: src/webex/pages/popup.tsx:417
+#: src/webex/pages/popup.tsx:420
 #, c-format
 msgid "Unknown event (%1$s)"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:460
+#: src/webex/pages/popup.tsx:463
 #, c-format
 msgid "Error: could not retrieve event history"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:485
+#: src/webex/pages/popup.tsx:488
 #, c-format
 msgid "Your wallet has no events recorded."
 msgstr "Ihre Geldbörse verzeichnet keine Vorkommnisse."
 
-#: src/webex/pages/return-coins.tsx:104
+#: src/webex/pages/return-coins.tsx:105
 #, c-format
 msgid "Wire to bank account"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:172
+#: src/webex/pages/return-coins.tsx:173
 #, fuzzy, c-format
 msgid "Confirm"
 msgstr "Bezahlung bestätigen"
 
-#: src/webex/pages/return-coins.tsx:175
+#: src/webex/pages/return-coins.tsx:176
 #, fuzzy, c-format
 msgid "Cancel"
 msgstr "Saldo"
 
-#: src/webex/renderHtml.tsx:212
+#: src/webex/renderHtml.tsx:216
 #, fuzzy, c-format
 msgid "Withdrawal fees:"
 msgstr "Abheben bei"
 
-#: src/webex/renderHtml.tsx:213
+#: src/webex/renderHtml.tsx:217
 #, c-format
 msgid "Rounding loss:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:214
+#: src/webex/renderHtml.tsx:218
 #, c-format
 msgid "Earliest expiration (for deposit): %1$s"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:220
+#: src/webex/renderHtml.tsx:224
 #, c-format
 msgid "# Coins"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:221
+#: src/webex/renderHtml.tsx:225
 #, c-format
 msgid "Value"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:222
+#: src/webex/renderHtml.tsx:226
 #, fuzzy, c-format
 msgid "Withdraw Fee"
 msgstr "Abheben bei %1$s"
 
-#: src/webex/renderHtml.tsx:223
+#: src/webex/renderHtml.tsx:227
 #, c-format
 msgid "Refresh Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:224
+#: src/webex/renderHtml.tsx:228
 #, c-format
 msgid "Deposit Fee"
 msgstr ""
diff --git a/src/i18n/en-US.po b/src/i18n/en-US.po
index e42d81fb..3307229b 100644
--- a/src/i18n/en-US.po
+++ b/src/i18n/en-US.po
@@ -27,28 +27,28 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/webex/pages/confirm-contract.tsx:70
+#: src/webex/pages/confirm-contract.tsx:73
 #, c-format
 msgid "show more details\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:84
+#: src/webex/pages/confirm-contract.tsx:87
 #, c-format
 msgid "Accepted exchanges:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:89
+#: src/webex/pages/confirm-contract.tsx:92
 #, c-format
 msgid "Exchanges in the wallet:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:156
+#: src/webex/pages/confirm-contract.tsx:159
 #, c-format
 msgid "You have insufficient funds of the requested currency in your wallet."
 msgstr ""
 
 #. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:158
+#: src/webex/pages/confirm-contract.tsx:161
 #, c-format
 msgid ""
 "You do not have any funds from an exchange that is accepted by this "
@@ -56,37 +56,37 @@ msgid ""
 "wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:214
+#: src/webex/pages/confirm-contract.tsx:217
 #, c-format
 msgid "The merchant%1$s offers you to purchase:\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:235
+#: src/webex/pages/confirm-contract.tsx:238
 #, c-format
 msgid "Confirm payment"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:121
+#: src/webex/pages/confirm-create-reserve.tsx:126
 #, c-format
 msgid "Select"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:137
+#: src/webex/pages/confirm-create-reserve.tsx:142
 #, c-format
 msgid "Error: URL may not be relative"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:205
+#: src/webex/pages/confirm-create-reserve.tsx:210
 #, c-format
 msgid "The exchange is trusted by the wallet.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:211
+#: src/webex/pages/confirm-create-reserve.tsx:216
 #, c-format
 msgid "The exchange is audited by a trusted auditor.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:217
+#: src/webex/pages/confirm-create-reserve.tsx:222
 #, c-format
 msgid ""
 "Warning:  The exchange is neither directly trusted nor audited by a trusted "
@@ -94,7 +94,7 @@ msgid ""
 "If you withdraw from this exchange, it will be trusted in the future.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:226
+#: src/webex/pages/confirm-create-reserve.tsx:231
 #, c-format
 msgid ""
 "Using exchange provider%1$s.\n"
@@ -102,229 +102,230 @@ msgid ""
 " %2$s in fees.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:240
+#: src/webex/pages/confirm-create-reserve.tsx:245
 #, c-format
 msgid ""
 "Waiting for a response from\n"
 " %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:257
+#: src/webex/pages/confirm-create-reserve.tsx:262
 #, c-format
 msgid ""
 "Information about fees will be available when an exchange provider is "
 "selected."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:300
+#: src/webex/pages/confirm-create-reserve.tsx:307
 #, c-format
 msgid "Accept fees and withdraw"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:305
+#: src/webex/pages/confirm-create-reserve.tsx:312
 #, c-format
 msgid "Change Exchange Provider"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:357
+#: src/webex/pages/confirm-create-reserve.tsx:364
 #, c-format
 msgid "You are about to withdraw %1$s from your bank account into your wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:442
+#: src/webex/pages/confirm-create-reserve.tsx:449
 #, c-format
 msgid ""
 "Oops, something went wrong. The wallet responded with error status (%1$s)."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:451
+#: src/webex/pages/confirm-create-reserve.tsx:458
 #, c-format
 msgid "Checking URL, please wait ..."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:465
+#: src/webex/pages/confirm-create-reserve.tsx:472
 #, c-format
 msgid "Can't parse amount: %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:472
+#: src/webex/pages/confirm-create-reserve.tsx:479
 #, c-format
 msgid "Can't parse wire_types: %1$s"
 msgstr ""
 
 #. #-#-#-#-#  - (PACKAGE VERSION)  #-#-#-#-#
 #. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:498 src/webex/pages/tip.tsx:148
+#: src/webex/pages/confirm-create-reserve.tsx:505 src/webex/pages/tip.tsx:155
 #, c-format
 msgid "Fatal error: \"%1$s\"."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:162
 #, c-format
 msgid "Balance"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:165
 #, c-format
 msgid "History"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:168
 #, c-format
 msgid "Debug"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:246
+#: src/webex/pages/popup.tsx:248
 #, c-format
 msgid "help"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:251
+#: src/webex/pages/popup.tsx:253
 #, c-format
 msgid ""
 "You have no balance to show. Need some\n"
 " %1$s getting started?\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:268
+#: src/webex/pages/popup.tsx:270
 #, c-format
 msgid "%1$s incoming\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:281
+#: src/webex/pages/popup.tsx:283
 #, c-format
 msgid "%1$s being spent\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:307
+#: src/webex/pages/popup.tsx:309
 #, c-format
 msgid "Error: could not retrieve balance information."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:334
+#: src/webex/pages/popup.tsx:336
 #, c-format
 msgid "Payback"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:335
+#: src/webex/pages/popup.tsx:337
 #, c-format
 msgid "Return Electronic Cash to Bank Account"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:338
 #, c-format
 msgid "Manage Trusted Auditors and Exchanges"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:348
+#: src/webex/pages/popup.tsx:350
 #, c-format
 msgid ""
 "Bank requested reserve (%1$s) for\n"
 " %2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:358
+#: src/webex/pages/popup.tsx:360
 #, c-format
 msgid ""
 "Started to withdraw\n"
 " %1$s%2$sfrom%3$s(%4$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:367
+#: src/webex/pages/popup.tsx:369
 #, c-format
 msgid "Merchant%1$soffered%2$scontract%3$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:378
+#: src/webex/pages/popup.tsx:380
 #, c-format
 msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:388
+#: src/webex/pages/popup.tsx:390
 #, c-format
 msgid ""
 "Paid%1$sto merchant%2$s.\n"
 "%3$s(%4$s)\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:398
+#: src/webex/pages/popup.tsx:400
 #, c-format
 msgid "Merchant%1$sgave a refund over%2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:408
+#: src/webex/pages/popup.tsx:410
 #, c-format
 msgid ""
-"Merchant%1$sgave a%2$sof%3$s.\n"
+"Merchant%1$sgave\n"
+"a%2$sof%3$s.\n"
 "%4$s%5$s"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:417
+#: src/webex/pages/popup.tsx:420
 #, c-format
 msgid "Unknown event (%1$s)"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:460
+#: src/webex/pages/popup.tsx:463
 #, c-format
 msgid "Error: could not retrieve event history"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:485
+#: src/webex/pages/popup.tsx:488
 #, c-format
 msgid "Your wallet has no events recorded."
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:104
+#: src/webex/pages/return-coins.tsx:105
 #, c-format
 msgid "Wire to bank account"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:172
+#: src/webex/pages/return-coins.tsx:173
 #, c-format
 msgid "Confirm"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:175
+#: src/webex/pages/return-coins.tsx:176
 #, c-format
 msgid "Cancel"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:212
+#: src/webex/renderHtml.tsx:216
 #, c-format
 msgid "Withdrawal fees:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:213
+#: src/webex/renderHtml.tsx:217
 #, c-format
 msgid "Rounding loss:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:214
+#: src/webex/renderHtml.tsx:218
 #, c-format
 msgid "Earliest expiration (for deposit): %1$s"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:220
+#: src/webex/renderHtml.tsx:224
 #, c-format
 msgid "# Coins"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:221
+#: src/webex/renderHtml.tsx:225
 #, c-format
 msgid "Value"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:222
+#: src/webex/renderHtml.tsx:226
 #, c-format
 msgid "Withdraw Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:223
+#: src/webex/renderHtml.tsx:227
 #, c-format
 msgid "Refresh Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:224
+#: src/webex/renderHtml.tsx:228
 #, c-format
 msgid "Deposit Fee"
 msgstr ""
diff --git a/src/i18n/fr.po b/src/i18n/fr.po
index 6b126178..b955dc6a 100644
--- a/src/i18n/fr.po
+++ b/src/i18n/fr.po
@@ -27,28 +27,28 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/webex/pages/confirm-contract.tsx:70
+#: src/webex/pages/confirm-contract.tsx:73
 #, c-format
 msgid "show more details\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:84
+#: src/webex/pages/confirm-contract.tsx:87
 #, c-format
 msgid "Accepted exchanges:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:89
+#: src/webex/pages/confirm-contract.tsx:92
 #, c-format
 msgid "Exchanges in the wallet:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:156
+#: src/webex/pages/confirm-contract.tsx:159
 #, c-format
 msgid "You have insufficient funds of the requested currency in your wallet."
 msgstr ""
 
 #. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:158
+#: src/webex/pages/confirm-contract.tsx:161
 #, c-format
 msgid ""
 "You do not have any funds from an exchange that is accepted by this "
@@ -56,37 +56,37 @@ msgid ""
 "wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:214
+#: src/webex/pages/confirm-contract.tsx:217
 #, c-format
 msgid "The merchant%1$s offers you to purchase:\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:235
+#: src/webex/pages/confirm-contract.tsx:238
 #, c-format
 msgid "Confirm payment"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:121
+#: src/webex/pages/confirm-create-reserve.tsx:126
 #, c-format
 msgid "Select"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:137
+#: src/webex/pages/confirm-create-reserve.tsx:142
 #, c-format
 msgid "Error: URL may not be relative"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:205
+#: src/webex/pages/confirm-create-reserve.tsx:210
 #, c-format
 msgid "The exchange is trusted by the wallet.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:211
+#: src/webex/pages/confirm-create-reserve.tsx:216
 #, c-format
 msgid "The exchange is audited by a trusted auditor.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:217
+#: src/webex/pages/confirm-create-reserve.tsx:222
 #, c-format
 msgid ""
 "Warning:  The exchange is neither directly trusted nor audited by a trusted "
@@ -94,7 +94,7 @@ msgid ""
 "If you withdraw from this exchange, it will be trusted in the future.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:226
+#: src/webex/pages/confirm-create-reserve.tsx:231
 #, c-format
 msgid ""
 "Using exchange provider%1$s.\n"
@@ -102,229 +102,230 @@ msgid ""
 " %2$s in fees.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:240
+#: src/webex/pages/confirm-create-reserve.tsx:245
 #, c-format
 msgid ""
 "Waiting for a response from\n"
 " %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:257
+#: src/webex/pages/confirm-create-reserve.tsx:262
 #, c-format
 msgid ""
 "Information about fees will be available when an exchange provider is "
 "selected."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:300
+#: src/webex/pages/confirm-create-reserve.tsx:307
 #, c-format
 msgid "Accept fees and withdraw"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:305
+#: src/webex/pages/confirm-create-reserve.tsx:312
 #, c-format
 msgid "Change Exchange Provider"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:357
+#: src/webex/pages/confirm-create-reserve.tsx:364
 #, c-format
 msgid "You are about to withdraw %1$s from your bank account into your wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:442
+#: src/webex/pages/confirm-create-reserve.tsx:449
 #, c-format
 msgid ""
 "Oops, something went wrong. The wallet responded with error status (%1$s)."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:451
+#: src/webex/pages/confirm-create-reserve.tsx:458
 #, c-format
 msgid "Checking URL, please wait ..."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:465
+#: src/webex/pages/confirm-create-reserve.tsx:472
 #, c-format
 msgid "Can't parse amount: %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:472
+#: src/webex/pages/confirm-create-reserve.tsx:479
 #, c-format
 msgid "Can't parse wire_types: %1$s"
 msgstr ""
 
 #. #-#-#-#-#  - (PACKAGE VERSION)  #-#-#-#-#
 #. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:498 src/webex/pages/tip.tsx:148
+#: src/webex/pages/confirm-create-reserve.tsx:505 src/webex/pages/tip.tsx:155
 #, c-format
 msgid "Fatal error: \"%1$s\"."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:162
 #, c-format
 msgid "Balance"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:165
 #, c-format
 msgid "History"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:168
 #, c-format
 msgid "Debug"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:246
+#: src/webex/pages/popup.tsx:248
 #, c-format
 msgid "help"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:251
+#: src/webex/pages/popup.tsx:253
 #, c-format
 msgid ""
 "You have no balance to show. Need some\n"
 " %1$s getting started?\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:268
+#: src/webex/pages/popup.tsx:270
 #, c-format
 msgid "%1$s incoming\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:281
+#: src/webex/pages/popup.tsx:283
 #, c-format
 msgid "%1$s being spent\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:307
+#: src/webex/pages/popup.tsx:309
 #, c-format
 msgid "Error: could not retrieve balance information."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:334
+#: src/webex/pages/popup.tsx:336
 #, c-format
 msgid "Payback"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:335
+#: src/webex/pages/popup.tsx:337
 #, c-format
 msgid "Return Electronic Cash to Bank Account"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:338
 #, c-format
 msgid "Manage Trusted Auditors and Exchanges"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:348
+#: src/webex/pages/popup.tsx:350
 #, c-format
 msgid ""
 "Bank requested reserve (%1$s) for\n"
 " %2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:358
+#: src/webex/pages/popup.tsx:360
 #, c-format
 msgid ""
 "Started to withdraw\n"
 " %1$s%2$sfrom%3$s(%4$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:367
+#: src/webex/pages/popup.tsx:369
 #, c-format
 msgid "Merchant%1$soffered%2$scontract%3$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:378
+#: src/webex/pages/popup.tsx:380
 #, c-format
 msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:388
+#: src/webex/pages/popup.tsx:390
 #, c-format
 msgid ""
 "Paid%1$sto merchant%2$s.\n"
 "%3$s(%4$s)\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:398
+#: src/webex/pages/popup.tsx:400
 #, c-format
 msgid "Merchant%1$sgave a refund over%2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:408
+#: src/webex/pages/popup.tsx:410
 #, c-format
 msgid ""
-"Merchant%1$sgave a%2$sof%3$s.\n"
+"Merchant%1$sgave\n"
+"a%2$sof%3$s.\n"
 "%4$s%5$s"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:417
+#: src/webex/pages/popup.tsx:420
 #, c-format
 msgid "Unknown event (%1$s)"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:460
+#: src/webex/pages/popup.tsx:463
 #, c-format
 msgid "Error: could not retrieve event history"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:485
+#: src/webex/pages/popup.tsx:488
 #, c-format
 msgid "Your wallet has no events recorded."
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:104
+#: src/webex/pages/return-coins.tsx:105
 #, c-format
 msgid "Wire to bank account"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:172
+#: src/webex/pages/return-coins.tsx:173
 #, c-format
 msgid "Confirm"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:175
+#: src/webex/pages/return-coins.tsx:176
 #, c-format
 msgid "Cancel"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:212
+#: src/webex/renderHtml.tsx:216
 #, c-format
 msgid "Withdrawal fees:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:213
+#: src/webex/renderHtml.tsx:217
 #, c-format
 msgid "Rounding loss:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:214
+#: src/webex/renderHtml.tsx:218
 #, c-format
 msgid "Earliest expiration (for deposit): %1$s"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:220
+#: src/webex/renderHtml.tsx:224
 #, c-format
 msgid "# Coins"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:221
+#: src/webex/renderHtml.tsx:225
 #, c-format
 msgid "Value"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:222
+#: src/webex/renderHtml.tsx:226
 #, c-format
 msgid "Withdraw Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:223
+#: src/webex/renderHtml.tsx:227
 #, c-format
 msgid "Refresh Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:224
+#: src/webex/renderHtml.tsx:228
 #, c-format
 msgid "Deposit Fee"
 msgstr ""
diff --git a/src/i18n/it.po b/src/i18n/it.po
index 6b126178..b955dc6a 100644
--- a/src/i18n/it.po
+++ b/src/i18n/it.po
@@ -27,28 +27,28 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/webex/pages/confirm-contract.tsx:70
+#: src/webex/pages/confirm-contract.tsx:73
 #, c-format
 msgid "show more details\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:84
+#: src/webex/pages/confirm-contract.tsx:87
 #, c-format
 msgid "Accepted exchanges:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:89
+#: src/webex/pages/confirm-contract.tsx:92
 #, c-format
 msgid "Exchanges in the wallet:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:156
+#: src/webex/pages/confirm-contract.tsx:159
 #, c-format
 msgid "You have insufficient funds of the requested currency in your wallet."
 msgstr ""
 
 #. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:158
+#: src/webex/pages/confirm-contract.tsx:161
 #, c-format
 msgid ""
 "You do not have any funds from an exchange that is accepted by this "
@@ -56,37 +56,37 @@ msgid ""
 "wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:214
+#: src/webex/pages/confirm-contract.tsx:217
 #, c-format
 msgid "The merchant%1$s offers you to purchase:\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:235
+#: src/webex/pages/confirm-contract.tsx:238
 #, c-format
 msgid "Confirm payment"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:121
+#: src/webex/pages/confirm-create-reserve.tsx:126
 #, c-format
 msgid "Select"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:137
+#: src/webex/pages/confirm-create-reserve.tsx:142
 #, c-format
 msgid "Error: URL may not be relative"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:205
+#: src/webex/pages/confirm-create-reserve.tsx:210
 #, c-format
 msgid "The exchange is trusted by the wallet.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:211
+#: src/webex/pages/confirm-create-reserve.tsx:216
 #, c-format
 msgid "The exchange is audited by a trusted auditor.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:217
+#: src/webex/pages/confirm-create-reserve.tsx:222
 #, c-format
 msgid ""
 "Warning:  The exchange is neither directly trusted nor audited by a trusted "
@@ -94,7 +94,7 @@ msgid ""
 "If you withdraw from this exchange, it will be trusted in the future.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:226
+#: src/webex/pages/confirm-create-reserve.tsx:231
 #, c-format
 msgid ""
 "Using exchange provider%1$s.\n"
@@ -102,229 +102,230 @@ msgid ""
 " %2$s in fees.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:240
+#: src/webex/pages/confirm-create-reserve.tsx:245
 #, c-format
 msgid ""
 "Waiting for a response from\n"
 " %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:257
+#: src/webex/pages/confirm-create-reserve.tsx:262
 #, c-format
 msgid ""
 "Information about fees will be available when an exchange provider is "
 "selected."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:300
+#: src/webex/pages/confirm-create-reserve.tsx:307
 #, c-format
 msgid "Accept fees and withdraw"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:305
+#: src/webex/pages/confirm-create-reserve.tsx:312
 #, c-format
 msgid "Change Exchange Provider"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:357
+#: src/webex/pages/confirm-create-reserve.tsx:364
 #, c-format
 msgid "You are about to withdraw %1$s from your bank account into your wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:442
+#: src/webex/pages/confirm-create-reserve.tsx:449
 #, c-format
 msgid ""
 "Oops, something went wrong. The wallet responded with error status (%1$s)."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:451
+#: src/webex/pages/confirm-create-reserve.tsx:458
 #, c-format
 msgid "Checking URL, please wait ..."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:465
+#: src/webex/pages/confirm-create-reserve.tsx:472
 #, c-format
 msgid "Can't parse amount: %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:472
+#: src/webex/pages/confirm-create-reserve.tsx:479
 #, c-format
 msgid "Can't parse wire_types: %1$s"
 msgstr ""
 
 #. #-#-#-#-#  - (PACKAGE VERSION)  #-#-#-#-#
 #. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:498 src/webex/pages/tip.tsx:148
+#: src/webex/pages/confirm-create-reserve.tsx:505 src/webex/pages/tip.tsx:155
 #, c-format
 msgid "Fatal error: \"%1$s\"."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:162
 #, c-format
 msgid "Balance"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:165
 #, c-format
 msgid "History"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:168
 #, c-format
 msgid "Debug"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:246
+#: src/webex/pages/popup.tsx:248
 #, c-format
 msgid "help"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:251
+#: src/webex/pages/popup.tsx:253
 #, c-format
 msgid ""
 "You have no balance to show. Need some\n"
 " %1$s getting started?\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:268
+#: src/webex/pages/popup.tsx:270
 #, c-format
 msgid "%1$s incoming\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:281
+#: src/webex/pages/popup.tsx:283
 #, c-format
 msgid "%1$s being spent\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:307
+#: src/webex/pages/popup.tsx:309
 #, c-format
 msgid "Error: could not retrieve balance information."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:334
+#: src/webex/pages/popup.tsx:336
 #, c-format
 msgid "Payback"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:335
+#: src/webex/pages/popup.tsx:337
 #, c-format
 msgid "Return Electronic Cash to Bank Account"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:338
 #, c-format
 msgid "Manage Trusted Auditors and Exchanges"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:348
+#: src/webex/pages/popup.tsx:350
 #, c-format
 msgid ""
 "Bank requested reserve (%1$s) for\n"
 " %2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:358
+#: src/webex/pages/popup.tsx:360
 #, c-format
 msgid ""
 "Started to withdraw\n"
 " %1$s%2$sfrom%3$s(%4$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:367
+#: src/webex/pages/popup.tsx:369
 #, c-format
 msgid "Merchant%1$soffered%2$scontract%3$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:378
+#: src/webex/pages/popup.tsx:380
 #, c-format
 msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:388
+#: src/webex/pages/popup.tsx:390
 #, c-format
 msgid ""
 "Paid%1$sto merchant%2$s.\n"
 "%3$s(%4$s)\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:398
+#: src/webex/pages/popup.tsx:400
 #, c-format
 msgid "Merchant%1$sgave a refund over%2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:408
+#: src/webex/pages/popup.tsx:410
 #, c-format
 msgid ""
-"Merchant%1$sgave a%2$sof%3$s.\n"
+"Merchant%1$sgave\n"
+"a%2$sof%3$s.\n"
 "%4$s%5$s"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:417
+#: src/webex/pages/popup.tsx:420
 #, c-format
 msgid "Unknown event (%1$s)"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:460
+#: src/webex/pages/popup.tsx:463
 #, c-format
 msgid "Error: could not retrieve event history"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:485
+#: src/webex/pages/popup.tsx:488
 #, c-format
 msgid "Your wallet has no events recorded."
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:104
+#: src/webex/pages/return-coins.tsx:105
 #, c-format
 msgid "Wire to bank account"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:172
+#: src/webex/pages/return-coins.tsx:173
 #, c-format
 msgid "Confirm"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:175
+#: src/webex/pages/return-coins.tsx:176
 #, c-format
 msgid "Cancel"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:212
+#: src/webex/renderHtml.tsx:216
 #, c-format
 msgid "Withdrawal fees:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:213
+#: src/webex/renderHtml.tsx:217
 #, c-format
 msgid "Rounding loss:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:214
+#: src/webex/renderHtml.tsx:218
 #, c-format
 msgid "Earliest expiration (for deposit): %1$s"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:220
+#: src/webex/renderHtml.tsx:224
 #, c-format
 msgid "# Coins"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:221
+#: src/webex/renderHtml.tsx:225
 #, c-format
 msgid "Value"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:222
+#: src/webex/renderHtml.tsx:226
 #, c-format
 msgid "Withdraw Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:223
+#: src/webex/renderHtml.tsx:227
 #, c-format
 msgid "Refresh Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:224
+#: src/webex/renderHtml.tsx:228
 #, c-format
 msgid "Deposit Fee"
 msgstr ""
diff --git a/src/i18n/strings.ts b/src/i18n/strings.ts
index d18368ad..9e78abc3 100644
--- a/src/i18n/strings.ts
+++ b/src/i18n/strings.ts
@@ -144,7 +144,7 @@ strings['de'] = {
       "Merchant%1$sgave a refund over%2$s.\n": [
         ""
       ],
-      "Merchant%1$sgave a%2$sof%3$s.\n%4$s%5$s": [
+      "Merchant%1$sgave\na%2$sof%3$s.\n%4$s%5$s": [
         "%1$s\n               möchte einen Vertrag über %2$s\n               
mit Ihnen abschließen."
       ],
       "Unknown event (%1$s)": [
@@ -333,7 +333,7 @@ strings['en-US'] = {
       "Merchant%1$sgave a refund over%2$s.\n": [
         ""
       ],
-      "Merchant%1$sgave a%2$sof%3$s.\n%4$s%5$s": [
+      "Merchant%1$sgave\na%2$sof%3$s.\n%4$s%5$s": [
         ""
       ],
       "Unknown event (%1$s)": [
@@ -522,7 +522,7 @@ strings['fr'] = {
       "Merchant%1$sgave a refund over%2$s.\n": [
         ""
       ],
-      "Merchant%1$sgave a%2$sof%3$s.\n%4$s%5$s": [
+      "Merchant%1$sgave\na%2$sof%3$s.\n%4$s%5$s": [
         ""
       ],
       "Unknown event (%1$s)": [
@@ -711,7 +711,7 @@ strings['it'] = {
       "Merchant%1$sgave a refund over%2$s.\n": [
         ""
       ],
-      "Merchant%1$sgave a%2$sof%3$s.\n%4$s%5$s": [
+      "Merchant%1$sgave\na%2$sof%3$s.\n%4$s%5$s": [
         ""
       ],
       "Unknown event (%1$s)": [
diff --git a/src/i18n/taler-wallet-webex.pot b/src/i18n/taler-wallet-webex.pot
index 6b126178..b955dc6a 100644
--- a/src/i18n/taler-wallet-webex.pot
+++ b/src/i18n/taler-wallet-webex.pot
@@ -27,28 +27,28 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/webex/pages/confirm-contract.tsx:70
+#: src/webex/pages/confirm-contract.tsx:73
 #, c-format
 msgid "show more details\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:84
+#: src/webex/pages/confirm-contract.tsx:87
 #, c-format
 msgid "Accepted exchanges:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:89
+#: src/webex/pages/confirm-contract.tsx:92
 #, c-format
 msgid "Exchanges in the wallet:"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:156
+#: src/webex/pages/confirm-contract.tsx:159
 #, c-format
 msgid "You have insufficient funds of the requested currency in your wallet."
 msgstr ""
 
 #. tslint:disable-next-line:max-line-length
-#: src/webex/pages/confirm-contract.tsx:158
+#: src/webex/pages/confirm-contract.tsx:161
 #, c-format
 msgid ""
 "You do not have any funds from an exchange that is accepted by this "
@@ -56,37 +56,37 @@ msgid ""
 "wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:214
+#: src/webex/pages/confirm-contract.tsx:217
 #, c-format
 msgid "The merchant%1$s offers you to purchase:\n"
 msgstr ""
 
-#: src/webex/pages/confirm-contract.tsx:235
+#: src/webex/pages/confirm-contract.tsx:238
 #, c-format
 msgid "Confirm payment"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:121
+#: src/webex/pages/confirm-create-reserve.tsx:126
 #, c-format
 msgid "Select"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:137
+#: src/webex/pages/confirm-create-reserve.tsx:142
 #, c-format
 msgid "Error: URL may not be relative"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:205
+#: src/webex/pages/confirm-create-reserve.tsx:210
 #, c-format
 msgid "The exchange is trusted by the wallet.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:211
+#: src/webex/pages/confirm-create-reserve.tsx:216
 #, c-format
 msgid "The exchange is audited by a trusted auditor.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:217
+#: src/webex/pages/confirm-create-reserve.tsx:222
 #, c-format
 msgid ""
 "Warning:  The exchange is neither directly trusted nor audited by a trusted "
@@ -94,7 +94,7 @@ msgid ""
 "If you withdraw from this exchange, it will be trusted in the future.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:226
+#: src/webex/pages/confirm-create-reserve.tsx:231
 #, c-format
 msgid ""
 "Using exchange provider%1$s.\n"
@@ -102,229 +102,230 @@ msgid ""
 " %2$s in fees.\n"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:240
+#: src/webex/pages/confirm-create-reserve.tsx:245
 #, c-format
 msgid ""
 "Waiting for a response from\n"
 " %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:257
+#: src/webex/pages/confirm-create-reserve.tsx:262
 #, c-format
 msgid ""
 "Information about fees will be available when an exchange provider is "
 "selected."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:300
+#: src/webex/pages/confirm-create-reserve.tsx:307
 #, c-format
 msgid "Accept fees and withdraw"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:305
+#: src/webex/pages/confirm-create-reserve.tsx:312
 #, c-format
 msgid "Change Exchange Provider"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:357
+#: src/webex/pages/confirm-create-reserve.tsx:364
 #, c-format
 msgid "You are about to withdraw %1$s from your bank account into your wallet."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:442
+#: src/webex/pages/confirm-create-reserve.tsx:449
 #, c-format
 msgid ""
 "Oops, something went wrong. The wallet responded with error status (%1$s)."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:451
+#: src/webex/pages/confirm-create-reserve.tsx:458
 #, c-format
 msgid "Checking URL, please wait ..."
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:465
+#: src/webex/pages/confirm-create-reserve.tsx:472
 #, c-format
 msgid "Can't parse amount: %1$s"
 msgstr ""
 
-#: src/webex/pages/confirm-create-reserve.tsx:472
+#: src/webex/pages/confirm-create-reserve.tsx:479
 #, c-format
 msgid "Can't parse wire_types: %1$s"
 msgstr ""
 
 #. #-#-#-#-#  - (PACKAGE VERSION)  #-#-#-#-#
 #. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:498 src/webex/pages/tip.tsx:148
+#: src/webex/pages/confirm-create-reserve.tsx:505 src/webex/pages/tip.tsx:155
 #, c-format
 msgid "Fatal error: \"%1$s\"."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:162
 #, c-format
 msgid "Balance"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:165
 #, c-format
 msgid "History"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:168
 #, c-format
 msgid "Debug"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:246
+#: src/webex/pages/popup.tsx:248
 #, c-format
 msgid "help"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:251
+#: src/webex/pages/popup.tsx:253
 #, c-format
 msgid ""
 "You have no balance to show. Need some\n"
 " %1$s getting started?\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:268
+#: src/webex/pages/popup.tsx:270
 #, c-format
 msgid "%1$s incoming\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:281
+#: src/webex/pages/popup.tsx:283
 #, c-format
 msgid "%1$s being spent\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:307
+#: src/webex/pages/popup.tsx:309
 #, c-format
 msgid "Error: could not retrieve balance information."
 msgstr ""
 
-#: src/webex/pages/popup.tsx:334
+#: src/webex/pages/popup.tsx:336
 #, c-format
 msgid "Payback"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:335
+#: src/webex/pages/popup.tsx:337
 #, c-format
 msgid "Return Electronic Cash to Bank Account"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:338
 #, c-format
 msgid "Manage Trusted Auditors and Exchanges"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:348
+#: src/webex/pages/popup.tsx:350
 #, c-format
 msgid ""
 "Bank requested reserve (%1$s) for\n"
 " %2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:358
+#: src/webex/pages/popup.tsx:360
 #, c-format
 msgid ""
 "Started to withdraw\n"
 " %1$s%2$sfrom%3$s(%4$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:367
+#: src/webex/pages/popup.tsx:369
 #, c-format
 msgid "Merchant%1$soffered%2$scontract%3$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:378
+#: src/webex/pages/popup.tsx:380
 #, c-format
 msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:388
+#: src/webex/pages/popup.tsx:390
 #, c-format
 msgid ""
 "Paid%1$sto merchant%2$s.\n"
 "%3$s(%4$s)\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:398
+#: src/webex/pages/popup.tsx:400
 #, c-format
 msgid "Merchant%1$sgave a refund over%2$s.\n"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:408
+#: src/webex/pages/popup.tsx:410
 #, c-format
 msgid ""
-"Merchant%1$sgave a%2$sof%3$s.\n"
+"Merchant%1$sgave\n"
+"a%2$sof%3$s.\n"
 "%4$s%5$s"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:417
+#: src/webex/pages/popup.tsx:420
 #, c-format
 msgid "Unknown event (%1$s)"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:460
+#: src/webex/pages/popup.tsx:463
 #, c-format
 msgid "Error: could not retrieve event history"
 msgstr ""
 
-#: src/webex/pages/popup.tsx:485
+#: src/webex/pages/popup.tsx:488
 #, c-format
 msgid "Your wallet has no events recorded."
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:104
+#: src/webex/pages/return-coins.tsx:105
 #, c-format
 msgid "Wire to bank account"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:172
+#: src/webex/pages/return-coins.tsx:173
 #, c-format
 msgid "Confirm"
 msgstr ""
 
-#: src/webex/pages/return-coins.tsx:175
+#: src/webex/pages/return-coins.tsx:176
 #, c-format
 msgid "Cancel"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:212
+#: src/webex/renderHtml.tsx:216
 #, c-format
 msgid "Withdrawal fees:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:213
+#: src/webex/renderHtml.tsx:217
 #, c-format
 msgid "Rounding loss:"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:214
+#: src/webex/renderHtml.tsx:218
 #, c-format
 msgid "Earliest expiration (for deposit): %1$s"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:220
+#: src/webex/renderHtml.tsx:224
 #, c-format
 msgid "# Coins"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:221
+#: src/webex/renderHtml.tsx:225
 #, c-format
 msgid "Value"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:222
+#: src/webex/renderHtml.tsx:226
 #, c-format
 msgid "Withdraw Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:223
+#: src/webex/renderHtml.tsx:227
 #, c-format
 msgid "Refresh Fee"
 msgstr ""
 
-#: src/webex/renderHtml.tsx:224
+#: src/webex/renderHtml.tsx:228
 #, c-format
 msgid "Deposit Fee"
 msgstr ""
diff --git a/src/talerTypes.ts b/src/talerTypes.ts
index 2ac2a515..e83a0b6b 100644
--- a/src/talerTypes.ts
+++ b/src/talerTypes.ts
@@ -630,3 +630,16 @@ export class TipToken {
    */
   static checked: (obj: any) => TipToken;
 }
+
+/**
+ * Wire detail, arbitrary object that must at least
+ * contain a "type" key.
+ */
+export type WireDetail = object & { type: string };
+
+/**
+ * Type guard for wire details.
+ */
+export function isWireDetail(x: any): x is WireDetail {
+  return x && typeof x === "object" && typeof x.type === "string";
+}
diff --git a/src/wallet.ts b/src/wallet.ts
index 41f8e727..6ad9964c 100644
--- a/src/wallet.ts
+++ b/src/wallet.ts
@@ -29,6 +29,7 @@ import {
   canonicalJson,
   canonicalizeBaseUrl,
   getTalerStampSec,
+  hash,
 } from "./helpers";
 import {
   HttpRequestLibrary,
@@ -62,6 +63,7 @@ import {
   RefreshPreCoinRecord,
   RefreshSessionRecord,
   ReserveRecord,
+  SenderWireRecord,
   TipRecord,
   WireFee,
 } from "./dbTypes";
@@ -79,6 +81,7 @@ import {
   RefundPermission,
   TipPlanchetDetail,
   TipResponse,
+  isWireDetail,
 } from "./talerTypes";
 import {
   CheckPayResult,
@@ -354,7 +357,7 @@ export const WALLET_PROTOCOL_VERSION = "2:0:0";
  * In the future we might consider adding migration functions for
  * each version increment.
  */
-export const WALLET_DB_VERSION = 23;
+export const WALLET_DB_VERSION = 24;
 
 const builtinCurrencies: CurrencyRecord[] = [
   {
@@ -533,7 +536,7 @@ function getWithdrawDenomList(amountAvailable: AmountJson,
 export namespace Stores {
   class ExchangeStore extends Store<ExchangeRecord> {
     constructor() {
-      super("exchanges", {keyPath: "baseUrl"});
+      super("exchanges", { keyPath: "baseUrl" });
     }
 
     pubKeyIndex = new Index<string, ExchangeRecord>(this, "pubKeyIndex", 
"masterPublicKey");
@@ -541,13 +544,13 @@ export namespace Stores {
 
   class NonceStore extends Store<NonceRecord> {
     constructor() {
-      super("nonces", {keyPath: "pub"});
+      super("nonces", { keyPath: "pub" });
     }
   }
 
   class CoinsStore extends Store<CoinRecord> {
     constructor() {
-      super("coins", {keyPath: "coinPub"});
+      super("coins", { keyPath: "coinPub" });
     }
 
     exchangeBaseUrlIndex = new Index<string, CoinRecord>(this, 
"exchangeBaseUrl", "exchangeBaseUrl");
@@ -566,7 +569,7 @@ export namespace Stores {
 
   class PurchasesStore extends Store<PurchaseRecord> {
     constructor() {
-      super("purchases", {keyPath: "contractTermsHash"});
+      super("purchases", { keyPath: "contractTermsHash" });
     }
 
     fulfillmentUrlIndex = new Index<string, PurchaseRecord>(this,
@@ -590,25 +593,25 @@ export namespace Stores {
 
   class CurrenciesStore extends Store<CurrencyRecord> {
     constructor() {
-      super("currencies", {keyPath: "name"});
+      super("currencies", { keyPath: "name" });
     }
   }
 
   class ConfigStore extends Store<ConfigRecord> {
     constructor() {
-      super("config", {keyPath: "key"});
+      super("config", { keyPath: "key" });
     }
   }
 
   class ExchangeWireFeesStore extends Store<ExchangeWireFeesRecord> {
     constructor() {
-      super("exchangeWireFees", {keyPath: "exchangeBaseUrl"});
+      super("exchangeWireFees", { keyPath: "exchangeBaseUrl" });
     }
   }
 
   class ReservesStore extends Store<ReserveRecord> {
     constructor() {
-      super("reserves", {keyPath: "reserve_pub"});
+      super("reserves", { keyPath: "reserve_pub" });
     }
     timestampCreatedIndex = new Index<string, ReserveRecord>(this, 
"timestampCreatedIndex", "created");
     timestampConfirmedIndex = new Index<string, ReserveRecord>(this, 
"timestampConfirmedIndex", "timestamp_confirmed");
@@ -617,11 +620,17 @@ export namespace Stores {
 
   class TipsStore extends Store<TipRecord> {
     constructor() {
-      super("tips", {keyPath: ["tipId", "merchantDomain"] as any as 
IDBKeyPath});
+      super("tips", { keyPath: ["tipId", "merchantDomain"] as any as 
IDBKeyPath });
     }
     coinPubIndex = new Index<string, TipRecord>(this, "coinPubIndex", 
"coinPubs", { multiEntry: true });
   }
 
+  class SenderWiresStore extends Store<SenderWireRecord> {
+    constructor() {
+      super("senderWires", { keyPath: "id" });
+    }
+  }
+
   export const coins = new CoinsStore();
   export const coinsReturns = new Store<CoinsReturnRecord>("coinsReturns", 
{keyPath: "contractTermsHash"});
   export const config = new ConfigStore();
@@ -636,6 +645,7 @@ export namespace Stores {
   export const reserves = new ReservesStore();
   export const purchases = new PurchasesStore();
   export const tips = new TipsStore();
+  export const senderWires = new SenderWiresStore();
 }
 
 /* tslint:enable:completed-docs */
@@ -1338,6 +1348,15 @@ export class Wallet {
       timestamp_depleted: 0,
     };
 
+    const senderWire = req.senderWire;
+    if (isWireDetail(senderWire)) {
+      const rec = {
+        id: hash(senderWire),
+        senderWire,
+      };
+      await this.q().put(Stores.senderWires, rec);
+    }
+
     await this.updateExchangeUsedTime(req.exchange);
     const exchangeInfo = await this.updateExchangeFromUrl(req.exchange);
     const {isAudited, isTrusted} = await this.getExchangeTrust(exchangeInfo);
@@ -2671,7 +2690,7 @@ export class Wallet {
     Object.keys(m).map((e) => { exchangeWireTypes[e] = Array.from(m[e]); });
 
     const senderWiresSet = new Set();
-    await this.q().iter(Stores.reserves).map((x) => {
+    await this.q().iter(Stores.senderWires).map((x) => {
       if (x.senderWire) {
         senderWiresSet.add(canonicalJson(x.senderWire));
       }
diff --git a/src/walletTypes.ts b/src/walletTypes.ts
index cd0eee4c..15c004c6 100644
--- a/src/walletTypes.ts
+++ b/src/walletTypes.ts
@@ -315,7 +315,7 @@ export interface SenderWireInfos {
   exchangeWireTypes: { [exchangeBaseUrl: string]: string[] };
 
   /**
-   * Sender wire types stored in the wallet.
+   * Sender wire information stored in the wallet.
    */
   senderWires: object[];
 }
diff --git a/src/webex/pages/return-coins.tsx b/src/webex/pages/return-coins.tsx
index 26db52ef..ff998d86 100644
--- a/src/webex/pages/return-coins.tsx
+++ b/src/webex/pages/return-coins.tsx
@@ -15,7 +15,7 @@
  */
 
 /**
- * View and edit auditors.
+ * Return coins to own bank account.
  *
  * @author Florian Dold
  */

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]