gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -more json_pack cleaning


From: gnunet
Subject: [taler-exchange] branch master updated: -more json_pack cleaning
Date: Sat, 31 Jul 2021 21:40:51 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new fde9dc80 -more json_pack cleaning
fde9dc80 is described below

commit fde9dc80f6e6a5fe4c5856b2ed78e6c024528c43
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Jul 31 21:40:48 2021 +0200

    -more json_pack cleaning
---
 src/auditor/report-lib.c                           |  29 --
 src/auditor/report-lib.h                           |  20 -
 src/auditor/taler-auditor-httpd.c                  |  14 +-
 .../taler-auditor-httpd_deposit-confirmation.c     |   6 +-
 src/auditor/taler-auditor-httpd_exchanges.c        |  22 +-
 src/auditor/taler-helper-auditor-aggregation.c     | 209 ++++----
 src/auditor/taler-helper-auditor-coins.c           | 466 +++++++++--------
 src/auditor/taler-helper-auditor-deposits.c        |  64 +--
 src/auditor/taler-helper-auditor-reserves.c        | 342 ++++++-------
 src/auditor/taler-helper-auditor-wire.c            | 569 +++++++++++----------
 src/include/taler_json_lib.h                       |  26 +
 src/json/json_pack.c                               |  23 +
 12 files changed, 902 insertions(+), 888 deletions(-)

diff --git a/src/auditor/report-lib.c b/src/auditor/report-lib.c
index 36baf640..5f45d719 100644
--- a/src/auditor/report-lib.c
+++ b/src/auditor/report-lib.c
@@ -113,35 +113,6 @@ TALER_ARL_do_abort (void)
 }
 
 
-/**
- * Convert absolute time to human-readable JSON string.
- *
- * @param at time to convert
- * @return human-readable string representing the time
- */
-json_t *
-TALER_ARL_json_from_time_abs_nbo (struct GNUNET_TIME_AbsoluteNBO at)
-{
-  return json_string
-           (GNUNET_STRINGS_absolute_time_to_string
-             (GNUNET_TIME_absolute_ntoh (at)));
-}
-
-
-/**
- * Convert absolute time to human-readable JSON string.
- *
- * @param at time to convert
- * @return human-readable string representing the time
- */
-json_t *
-TALER_ARL_json_from_time_abs (struct GNUNET_TIME_Absolute at)
-{
-  return json_string
-           (GNUNET_STRINGS_absolute_time_to_string (at));
-}
-
-
 /**
  * Add @a object to the report @a array.  Fail hard if this fails.
  *
diff --git a/src/auditor/report-lib.h b/src/auditor/report-lib.h
index 05632f2d..5df990cf 100644
--- a/src/auditor/report-lib.h
+++ b/src/auditor/report-lib.h
@@ -90,26 +90,6 @@ extern char *TALER_ARL_auditor_url;
 extern struct GNUNET_TIME_Absolute start_time;
 
 
-/**
- * Convert absolute time to human-readable JSON string.
- *
- * @param at time to convert
- * @return human-readable string representing the time
- */
-json_t *
-TALER_ARL_json_from_time_abs_nbo (struct GNUNET_TIME_AbsoluteNBO at);
-
-
-/**
- * Convert absolute time to human-readable JSON string.
- *
- * @param at time to convert
- * @return human-readable string representing the time
- */
-json_t *
-TALER_ARL_json_from_time_abs (struct GNUNET_TIME_Absolute at);
-
-
 /**
  * Add @a object to the report @a array.  Fail hard if this fails.
  *
diff --git a/src/auditor/taler-auditor-httpd.c 
b/src/auditor/taler-auditor-httpd.c
index d68ec759..1824167f 100644
--- a/src/auditor/taler-auditor-httpd.c
+++ b/src/auditor/taler-auditor-httpd.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2014-2020 Taler Systems SA
+  Copyright (C) 2014-2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero General Public License as published by the Free 
Software
@@ -323,11 +323,13 @@ handle_version (struct TAH_RequestHandler *rh,
   (void) connection_cls;
   if (NULL == ver)
   {
-    ver = json_pack ("{s:s, s:s, s:o}",
-                     "version", AUDITOR_PROTOCOL_VERSION,
-                     "currency", TAH_currency,
-                     "auditor_public_key", GNUNET_JSON_from_data_auto (
-                       &auditor_pub));
+    ver = GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_string ("version",
+                               AUDITOR_PROTOCOL_VERSION),
+      GNUNET_JSON_pack_string ("currency",
+                               TAH_currency),
+      GNUNET_JSON_pack_data_auto ("auditor_public_key",
+                                  &auditor_pub));
   }
   if (NULL == ver)
   {
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation.c 
b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
index 31d7a719..9632f0cc 100644
--- a/src/auditor/taler-auditor-httpd_deposit-confirmation.c
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
@@ -228,10 +228,10 @@ verify_and_execute_deposit_confirmation (
                                        TALER_EC_GENERIC_DB_STORE_FAILED,
                                        "deposit confirmation");
   }
-  return TALER_MHD_reply_json_pack (connection,
+  return TALER_MHD_REPLY_JSON_PACK (connection,
                                     MHD_HTTP_OK,
-                                    "{s:s}",
-                                    "status", "DEPOSIT_CONFIRMATION_OK");
+                                    GNUNET_JSON_pack_string ("status",
+                                                             
"DEPOSIT_CONFIRMATION_OK"));
 }
 
 
diff --git a/src/auditor/taler-auditor-httpd_exchanges.c 
b/src/auditor/taler-auditor-httpd_exchanges.c
index be627ba1..7b54b6d4 100644
--- a/src/auditor/taler-auditor-httpd_exchanges.c
+++ b/src/auditor/taler-auditor-httpd_exchanges.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2014-2020 Taler Systems SA
+  Copyright (C) 2014-2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero General Public License as published by the Free 
Software
@@ -45,12 +45,11 @@ add_exchange (void *cls,
   json_t *list = cls;
   json_t *obj;
 
-  obj = json_pack ("{s:o, s:s}",
-                   "master_pub",
-                   GNUNET_JSON_from_data_auto (master_pub),
-                   "exchange_url",
-                   exchange_url);
-  GNUNET_break (NULL != obj);
+  obj = GNUNET_JSON_PACK (
+    GNUNET_JSON_pack_data_auto ("master_pub",
+                                master_pub),
+    GNUNET_JSON_pack_string ("exchange_url",
+                             exchange_url));
   GNUNET_break (0 ==
                 json_array_append_new (list,
                                        obj));
@@ -108,10 +107,11 @@ TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh,
                                        TALER_EC_GENERIC_DB_FETCH_FAILED,
                                        "exchanges");
   }
-  return TALER_MHD_reply_json_pack (connection,
-                                    MHD_HTTP_OK,
-                                    "{s:o}",
-                                    "exchanges", ja);
+  return TALER_MHD_REPLY_JSON_PACK (
+    connection,
+    MHD_HTTP_OK,
+    GNUNET_JSON_pack_array_steal ("exchanges",
+                                  ja));
 }
 
 
diff --git a/src/auditor/taler-helper-auditor-aggregation.c 
b/src/auditor/taler-helper-auditor-aggregation.c
index cdcbd37d..4990ae40 100644
--- a/src/auditor/taler-helper-auditor-aggregation.c
+++ b/src/auditor/taler-helper-auditor-aggregation.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2016-2020 Taler Systems SA
+  Copyright (C) 2016-2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero Public License as published by the Free Software
@@ -163,12 +163,17 @@ report_amount_arithmetic_inconsistency (
                                exchange);
   }
   TALER_ARL_report (report_amount_arithmetic_inconsistencies,
-                    json_pack ("{s:s, s:I, s:o, s:o, s:I}",
-                               "operation", operation,
-                               "rowid", (json_int_t) rowid,
-                               "exchange", TALER_JSON_from_amount (exchange),
-                               "auditor", TALER_JSON_from_amount (auditor),
-                               "profitable", (json_int_t) profitable));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("operation",
+                                               operation),
+                      GNUNET_JSON_pack_uint64 ("rowid",
+                                               rowid),
+                      TALER_JSON_pack_amount ("exchange",
+                                              exchange),
+                      TALER_JSON_pack_amount ("auditor",
+                                              auditor),
+                      GNUNET_JSON_pack_int64 ("profitable",
+                                              profitable)));
   if (0 != profitable)
   {
     target = (1 == profitable)
@@ -222,13 +227,17 @@ report_coin_arithmetic_inconsistency (
                                exchange);
   }
   TALER_ARL_report (report_coin_inconsistencies,
-                    json_pack ("{s:s, s:o, s:o, s:o, s:I}",
-                               "operation", operation,
-                               "coin_pub", GNUNET_JSON_from_data_auto (
-                                 coin_pub),
-                               "exchange", TALER_JSON_from_amount (exchange),
-                               "auditor", TALER_JSON_from_amount (auditor),
-                               "profitable", (json_int_t) profitable));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("operation",
+                                               operation),
+                      GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                  coin_pub),
+                      TALER_JSON_pack_amount ("exchange",
+                                              exchange),
+                      TALER_JSON_pack_amount ("auditor",
+                                              auditor),
+                      GNUNET_JSON_pack_int64 ("profitable",
+                                              profitable)));
   if (0 != profitable)
   {
     target = (1 == profitable)
@@ -254,10 +263,13 @@ report_row_inconsistency (const char *table,
                           const char *diagnostic)
 {
   TALER_ARL_report (report_row_inconsistencies,
-                    json_pack ("{s:s, s:I, s:s}",
-                               "table", table,
-                               "row", (json_int_t) rowid,
-                               "diagnostic", diagnostic));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("table",
+                                               table),
+                      GNUNET_JSON_pack_uint64 ("row",
+                                               rowid),
+                      GNUNET_JSON_pack_string ("diagnostic",
+                                               diagnostic)));
 }
 
 
@@ -797,12 +809,15 @@ wire_transfer_information_cb (
                              denom_pub))
   {
     TALER_ARL_report (report_bad_sig_losses,
-                      json_pack ("{s:s, s:I, s:o, s:o}",
-                                 "operation", "wire",
-                                 "row", (json_int_t) rowid,
-                                 "loss", TALER_JSON_from_amount (coin_value),
-                                 "coin_pub", GNUNET_JSON_from_data_auto (
-                                   &coin.coin_pub)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("operation",
+                                                 "wire"),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        TALER_JSON_pack_amount ("loss",
+                                                coin_value),
+                        GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                    &coin.coin_pub)));
     TALER_ARL_amount_add (&total_bad_sig_loss,
                           &total_bad_sig_loss,
                           coin_value);
@@ -985,23 +1000,25 @@ get_wire_fee (struct AggregationContext *ac,
        (wfi->prev->end_date.abs_value_us > wfi->start_date.abs_value_us) )
   {
     TALER_ARL_report (report_fee_time_inconsistencies,
-                      json_pack ("{s:s, s:s, s:o}",
-                                 "type", method,
-                                 "diagnostic",
-                                 "start date before previous end date",
-                                 "time", TALER_ARL_json_from_time_abs (
-                                   wfi->start_date)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("type",
+                                                 method),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "start date before previous 
end date"),
+                        TALER_JSON_pack_time_abs_human ("time",
+                                                        wfi->start_date)));
   }
   if ( (NULL != wfi->next) &&
        (wfi->next->start_date.abs_value_us >= wfi->end_date.abs_value_us) )
   {
     TALER_ARL_report (report_fee_time_inconsistencies,
-                      json_pack ("{s:s, s:s, s:o}",
-                                 "type", method,
-                                 "diagnostic",
-                                 "end date date after next start date",
-                                 "time", TALER_ARL_json_from_time_abs (
-                                   wfi->end_date)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("type",
+                                                 method),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "end date date after next 
start date"),
+                        TALER_JSON_pack_time_abs_human ("time",
+                                                        wfi->end_date)));
   }
   return &wfi->wire_fee;
 }
@@ -1164,13 +1181,15 @@ check_wire_out_cb (void *cls,
     }
 
     TALER_ARL_report (report_wire_out_inconsistencies,
-                      json_pack ("{s:O, s:I, s:o, s:o}",
-                                 "destination_account", wire,
-                                 "rowid", (json_int_t) rowid,
-                                 "expected",
-                                 TALER_JSON_from_amount (&final_amount),
-                                 "claimed",
-                                 TALER_JSON_from_amount (amount)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_object_incref ("destination_account",
+                                                        (json_t *) wire),
+                        GNUNET_JSON_pack_uint64 ("rowid",
+                                                 rowid),
+                        TALER_JSON_pack_amount ("expected",
+                                                &final_amount),
+                        TALER_JSON_pack_amount ("claimed",
+                                                amount)));
     if (TALER_ARL_do_abort ())
       return GNUNET_SYSERR;
     return GNUNET_OK;
@@ -1323,8 +1342,6 @@ run (void *cls,
      const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  json_t *report;
-
   (void) cls;
   (void) args;
   (void) cfgfile;
@@ -1333,7 +1350,7 @@ run (void *cls,
   if (GNUNET_OK !=
       TALER_ARL_init (c))
   {
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1387,71 +1404,71 @@ run (void *cls,
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Audit failed\n");
     TALER_ARL_done (NULL);
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Audit complete\n");
-  report = json_pack ("{s:o, s:o, s:o, s:o, s:o,"
-                      " s:o, s:o, s:o, s:o, s:o,"
-                      " s:o, s:o, s:o, s:I, s:I,"
-                      " s:o, s:o, s:o }",
-                      /* blocks #1 */
+  TALER_ARL_done (GNUNET_JSON_PACK (
+                    /* blocks #1 */
+                    GNUNET_JSON_pack_array_steal (
                       "wire_out_inconsistencies",
-                      report_wire_out_inconsistencies,
-                      /* Tested in test-auditor.sh #23 */
+                      report_wire_out_inconsistencies),
+                    /* Tested in test-auditor.sh #23 */
+                    TALER_JSON_pack_amount (
                       "total_wire_out_delta_plus",
-                      TALER_JSON_from_amount (
-                        &total_wire_out_delta_plus),
-                      /* Tested in test-auditor.sh #23 */
+                      &total_wire_out_delta_plus),
+                    /* Tested in test-auditor.sh #23 */
+                    TALER_JSON_pack_amount (
                       "total_wire_out_delta_minus",
-                      TALER_JSON_from_amount (
-                        &total_wire_out_delta_minus),
-                      /* Tested in test-auditor.sh #28/32 */
-                      "bad_sig_losses",
-                      report_bad_sig_losses,
-                      /* Tested in test-auditor.sh #28/32 */
-                      "total_bad_sig_loss",
-                      TALER_JSON_from_amount (&total_bad_sig_loss),
-                      /* block #2 */
-                      /* Tested in test-auditor.sh #15 */
+                      &total_wire_out_delta_minus),
+                    /* Tested in test-auditor.sh #28/32 */
+                    GNUNET_JSON_pack_array_steal ("bad_sig_losses",
+                                                  report_bad_sig_losses),
+                    /* Tested in test-auditor.sh #28/32 */
+                    TALER_JSON_pack_amount ("total_bad_sig_loss",
+                                            &total_bad_sig_loss),
+                    /* block #2 */
+                    /* Tested in test-auditor.sh #15 */
+                    GNUNET_JSON_pack_array_steal (
                       "row_inconsistencies",
-                      report_row_inconsistencies,
+                      report_row_inconsistencies),
+                    GNUNET_JSON_pack_array_steal (
                       "coin_inconsistencies",
-                      report_coin_inconsistencies,
-                      "total_coin_delta_plus",
-                      TALER_JSON_from_amount (&total_coin_delta_plus),
-                      "total_coin_delta_minus",
-                      TALER_JSON_from_amount (
-                        &total_coin_delta_minus),
+                      report_coin_inconsistencies),
+                    TALER_JSON_pack_amount ("total_coin_delta_plus",
+                                            &total_coin_delta_plus),
+                    TALER_JSON_pack_amount ("total_coin_delta_minus",
+                                            &total_coin_delta_minus),
+                    GNUNET_JSON_pack_array_steal (
                       "amount_arithmetic_inconsistencies",
-                      report_amount_arithmetic_inconsistencies,
-                      /* block #3 */
+                      report_amount_arithmetic_inconsistencies),
+                    /* block #3 */
+                    TALER_JSON_pack_amount (
                       "total_arithmetic_delta_plus",
-                      TALER_JSON_from_amount (
-                        &total_arithmetic_delta_plus),
+                      &total_arithmetic_delta_plus),
+                    TALER_JSON_pack_amount (
                       "total_arithmetic_delta_minus",
-                      TALER_JSON_from_amount (
-                        &total_arithmetic_delta_minus),
+                      &total_arithmetic_delta_minus),
+                    TALER_JSON_pack_amount (
                       "total_aggregation_fee_income",
-                      TALER_JSON_from_amount (
-                        &total_aggregation_fee_income),
+                      &total_aggregation_fee_income),
+                    GNUNET_JSON_pack_uint64 (
                       "start_ppa_wire_out_serial_id",
-                      (json_int_t) ppa_start.last_wire_out_serial_id,
+                      ppa_start.last_wire_out_serial_id),
+                    GNUNET_JSON_pack_uint64 (
                       "end_ppa_wire_out_serial_id",
-                      (json_int_t) ppa.last_wire_out_serial_id,
-                      /* block #4 */
+                      ppa.last_wire_out_serial_id),
+                    /* block #4 */
+                    TALER_JSON_pack_time_abs_human (
                       "auditor_start_time",
-                      TALER_ARL_json_from_time_abs (
-                        start_time),
+                      start_time),
+                    TALER_JSON_pack_time_abs_human (
                       "auditor_end_time",
-                      TALER_ARL_json_from_time_abs (
-                        GNUNET_TIME_absolute_get ()),
+                      GNUNET_TIME_absolute_get ()),
+                    GNUNET_JSON_pack_array_steal (
                       "wire_fee_time_inconsistencies",
-                      report_fee_time_inconsistencies
-                      );
-  GNUNET_break (NULL != report);
-  TALER_ARL_done (report);
+                      report_fee_time_inconsistencies)));
 }
 
 
@@ -1489,7 +1506,7 @@ main (int argc,
   if (GNUNET_OK !=
       GNUNET_STRINGS_get_utf8_args (argc, argv,
                                     &argc, &argv))
-    return 4;
+    return EXIT_INVALIDARGUMENT;
   ret = GNUNET_PROGRAM_run (
     argc,
     argv,
@@ -1500,9 +1517,9 @@ main (int argc,
     NULL);
   GNUNET_free_nz ((void *) argv);
   if (GNUNET_SYSERR == ret)
-    return 3;
+    return EXIT_INVALIDARGUMENT;
   if (GNUNET_NO == ret)
-    return 0;
+    return EXIT_SUCCESS;
   return global_ret;
 }
 
diff --git a/src/auditor/taler-helper-auditor-coins.c 
b/src/auditor/taler-helper-auditor-coins.c
index 58c06bed..40b68c4a 100644
--- a/src/auditor/taler-helper-auditor-coins.c
+++ b/src/auditor/taler-helper-auditor-coins.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2016-2020 Taler Systems SA
+  Copyright (C) 2016-2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero Public License as published by the Free Software
@@ -285,21 +285,19 @@ report_emergency_by_amount (
               GNUNET_h2s (&issue->denom_hash),
               TALER_amount2s (loss));
   TALER_ARL_report (report_emergencies,
-                    json_pack ("{s:o, s:o, s:o, s:o, s:o, s:o}",
-                               "denompub_hash",
-                               GNUNET_JSON_from_data_auto (&issue->denom_hash),
-                               "denom_risk",
-                               TALER_JSON_from_amount (risk),
-                               "denom_loss",
-                               TALER_JSON_from_amount (loss),
-                               "start",
-                               TALER_ARL_json_from_time_abs_nbo (
-                                 issue->start),
-                               "deposit_end",
-                               TALER_ARL_json_from_time_abs_nbo (
-                                 issue->expire_deposit),
-                               "value",
-                               TALER_JSON_from_amount_nbo (&issue->value)));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_data_auto ("denompub_hash",
+                                                  &issue->denom_hash),
+                      TALER_JSON_pack_amount ("denom_risk",
+                                              risk),
+                      TALER_JSON_pack_amount ("denom_loss",
+                                              loss),
+                      TALER_JSON_pack_time_abs_nbo_human ("start",
+                                                          issue->start),
+                      TALER_JSON_pack_time_abs_nbo_human ("deposit_end",
+                                                          
issue->expire_deposit),
+                      TALER_JSON_pack_amount_nbo ("value",
+                                                  &issue->value)));
   TALER_ARL_amount_add (&reported_emergency_risk_by_amount,
                         &reported_emergency_risk_by_amount,
                         risk);
@@ -333,23 +331,21 @@ report_emergency_by_count (
   struct TALER_Amount denom_value;
 
   TALER_ARL_report (report_emergencies_by_count,
-                    json_pack ("{s:o, s:I, s:I, s:o, s:o, s:o, s:o}",
-                               "denompub_hash",
-                               GNUNET_JSON_from_data_auto (&issue->denom_hash),
-                               "num_issued",
-                               (json_int_t) num_issued,
-                               "num_known",
-                               (json_int_t) num_known,
-                               "denom_risk",
-                               TALER_JSON_from_amount (risk),
-                               "start",
-                               TALER_ARL_json_from_time_abs_nbo (
-                                 issue->start),
-                               "deposit_end",
-                               TALER_ARL_json_from_time_abs_nbo (
-                                 issue->expire_deposit),
-                               "value",
-                               TALER_JSON_from_amount_nbo (&issue->value)));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_data_auto ("denompub_hash",
+                                                  &issue->denom_hash),
+                      GNUNET_JSON_pack_uint64 ("num_issued",
+                                               num_issued),
+                      GNUNET_JSON_pack_uint64 ("num_known",
+                                               num_known),
+                      TALER_JSON_pack_amount ("denom_risk",
+                                              risk),
+                      TALER_JSON_pack_time_abs_nbo_human ("start",
+                                                          issue->start),
+                      TALER_JSON_pack_time_abs_nbo_human ("deposit_end",
+                                                          
issue->expire_deposit),
+                      TALER_JSON_pack_amount_nbo ("value",
+                                                  &issue->value)));
   TALER_ARL_amount_add (&reported_emergency_risk_by_count,
                         &reported_emergency_risk_by_count,
                         risk);
@@ -406,12 +402,17 @@ report_amount_arithmetic_inconsistency (
                                exchange);
   }
   TALER_ARL_report (report_amount_arithmetic_inconsistencies,
-                    json_pack ("{s:s, s:I, s:o, s:o, s:I}",
-                               "operation", operation,
-                               "rowid", (json_int_t) rowid,
-                               "exchange", TALER_JSON_from_amount (exchange),
-                               "auditor", TALER_JSON_from_amount (auditor),
-                               "profitable", (json_int_t) profitable));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("operation",
+                                               operation),
+                      GNUNET_JSON_pack_uint64 ("rowid",
+                                               rowid),
+                      TALER_JSON_pack_amount ("exchange",
+                                              exchange),
+                      TALER_JSON_pack_amount ("auditor",
+                                              auditor),
+                      GNUNET_JSON_pack_int64 ("profitable",
+                                              profitable)));
   if (0 != profitable)
   {
     target = (1 == profitable)
@@ -437,10 +438,13 @@ report_row_inconsistency (const char *table,
                           const char *diagnostic)
 {
   TALER_ARL_report (report_row_inconsistencies,
-                    json_pack ("{s:s, s:I, s:s}",
-                               "table", table,
-                               "row", (json_int_t) rowid,
-                               "diagnostic", diagnostic));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("table",
+                                               table),
+                      GNUNET_JSON_pack_uint64 ("row",
+                                               rowid),
+                      GNUNET_JSON_pack_string ("diagnostic",
+                                               diagnostic)));
 }
 
 
@@ -1196,13 +1200,15 @@ check_known_coin (const char *operation,
                              denom_pub))
   {
     TALER_ARL_report (report_bad_sig_losses,
-                      json_pack ("{s:s, s:I, s:o, s:o}",
-                                 "operation", operation,
-                                 "row", (json_int_t) rowid,
-                                 "loss", TALER_JSON_from_amount (
-                                   loss_potential),
-                                 "coin_pub", GNUNET_JSON_from_data_auto (
-                                   coin_pub)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("operation",
+                                                 operation),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        TALER_JSON_pack_amount ("loss",
+                                                loss_potential),
+                        GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                    coin_pub)));
     TALER_ARL_amount_add (&total_bad_sig_loss,
                           &total_bad_sig_loss,
                           loss_potential);
@@ -1302,13 +1308,15 @@ refresh_session_cb (void *cls,
                                     &coin_pub->eddsa_pub))
     {
       TALER_ARL_report (report_bad_sig_losses,
-                        json_pack ("{s:s, s:I, s:o, s:o}",
-                                   "operation", "melt",
-                                   "row", (json_int_t) rowid,
-                                   "loss", TALER_JSON_from_amount (
-                                     amount_with_fee),
-                                   "coin_pub", GNUNET_JSON_from_data_auto (
-                                     coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_string ("operation",
+                                                   "melt"),
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("loss",
+                                                  amount_with_fee),
+                          GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                      coin_pub)));
       TALER_ARL_amount_add (&total_bad_sig_loss,
                             &total_bad_sig_loss,
                             amount_with_fee);
@@ -1345,12 +1353,13 @@ refresh_session_cb (void *cls,
          with invalid data, even if the exchange is correctly operating. We
          still report it. */
       TALER_ARL_report (report_refreshs_hanging,
-                        json_pack ("{s:I, s:o, s:o}",
-                                   "row", (json_int_t) rowid,
-                                   "amount", TALER_JSON_from_amount (
-                                     amount_with_fee),
-                                   "coin_pub", GNUNET_JSON_from_data_auto (
-                                     coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("amount",
+                                                  amount_with_fee),
+                          GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                      coin_pub)));
       TALER_ARL_amount_add (&total_refresh_hanging,
                             &total_refresh_hanging,
                             amount_with_fee);
@@ -1653,13 +1662,15 @@ deposit_cb (void *cls,
                                                  &dr.h_wire))
     {
       TALER_ARL_report (report_bad_sig_losses,
-                        json_pack ("{s:s, s:I, s:o, s:o}",
-                                   "operation", "deposit",
-                                   "row", (json_int_t) rowid,
-                                   "loss", TALER_JSON_from_amount (
-                                     amount_with_fee),
-                                   "coin_pub", GNUNET_JSON_from_data_auto (
-                                     coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_string ("operation",
+                                                   "deposit"),
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("loss",
+                                                  amount_with_fee),
+                          GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                      coin_pub)));
       TALER_ARL_amount_add (&total_bad_sig_loss,
                             &total_bad_sig_loss,
                             amount_with_fee);
@@ -1679,13 +1690,15 @@ deposit_cb (void *cls,
                                     &coin_pub->eddsa_pub))
     {
       TALER_ARL_report (report_bad_sig_losses,
-                        json_pack ("{s:s, s:I, s:o, s:o}",
-                                   "operation", "deposit",
-                                   "row", (json_int_t) rowid,
-                                   "loss", TALER_JSON_from_amount (
-                                     amount_with_fee),
-                                   "coin_pub", GNUNET_JSON_from_data_auto (
-                                     coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_string ("operation",
+                                                   "deposit"),
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("loss",
+                                                  amount_with_fee),
+                          GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                      coin_pub)));
       TALER_ARL_amount_add (&total_bad_sig_loss,
                             &total_bad_sig_loss,
                             amount_with_fee);
@@ -1850,13 +1863,15 @@ refund_cb (void *cls,
                                     &merchant_pub->eddsa_pub))
     {
       TALER_ARL_report (report_bad_sig_losses,
-                        json_pack ("{s:s, s:I, s:o, s:o}",
-                                   "operation", "refund",
-                                   "row", (json_int_t) rowid,
-                                   "loss", TALER_JSON_from_amount (
-                                     amount_with_fee),
-                                   "coin_pub", GNUNET_JSON_from_data_auto (
-                                     coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_string ("operation",
+                                                   "refund"),
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("loss",
+                                                  amount_with_fee),
+                          GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                      coin_pub)));
       TALER_ARL_amount_add (&total_bad_sig_loss,
                             &total_bad_sig_loss,
                             amount_with_fee);
@@ -1961,12 +1976,15 @@ check_recoup (struct CoinContext *cc,
                              denom_pub))
   {
     TALER_ARL_report (report_bad_sig_losses,
-                      json_pack ("{s:s, s:I, s:o, s:o}",
-                                 "operation", operation,
-                                 "row", (json_int_t) rowid,
-                                 "loss", TALER_JSON_from_amount (amount),
-                                 "coin_pub", GNUNET_JSON_from_data_auto (
-                                   &coin->denom_pub_hash)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("operation",
+                                                 operation),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        TALER_JSON_pack_amount ("loss",
+                                                amount),
+                        GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                    &coin->denom_pub_hash)));
     TALER_ARL_amount_add (&total_bad_sig_loss,
                           &total_bad_sig_loss,
                           amount);
@@ -2018,12 +2036,15 @@ check_recoup (struct CoinContext *cc,
                                     &coin->coin_pub.eddsa_pub))
     {
       TALER_ARL_report (report_bad_sig_losses,
-                        json_pack ("{s:s, s:I, s:o, s:o}",
-                                   "operation", operation,
-                                   "row", (json_int_t) rowid,
-                                   "loss", TALER_JSON_from_amount (amount),
-                                   "coin_pub", GNUNET_JSON_from_data_auto (
-                                     &coin->coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_string ("operation",
+                                                   operation),
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("loss",
+                                                  amount),
+                          GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                      &coin->coin_pub)));
       TALER_ARL_amount_add (&total_bad_sig_loss,
                             &total_bad_sig_loss,
                             amount);
@@ -2047,15 +2068,17 @@ check_recoup (struct CoinContext *cc,
     {
       /* Woopsie, we allowed recoup on non-revoked denomination!? */
       TALER_ARL_report (report_bad_sig_losses,
-                        json_pack ("{s:s, s:s, s:I, s:o, s:o}",
-                                   "operation",
-                                   operation,
-                                   "hint",
-                                   "denomination not revoked",
-                                   "row", (json_int_t) rowid,
-                                   "loss", TALER_JSON_from_amount (amount),
-                                   "coin_pub", GNUNET_JSON_from_data_auto (
-                                     &coin->coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_string ("operation",
+                                                   operation),
+                          GNUNET_JSON_pack_string ("hint",
+                                                   "denomination not revoked"),
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("loss",
+                                                  amount),
+                          GNUNET_JSON_pack_data_auto ("coin_pub",
+                                                      &coin->coin_pub)));
       TALER_ARL_amount_add (&total_bad_sig_loss,
                             &total_bad_sig_loss,
                             amount);
@@ -2273,18 +2296,16 @@ check_denomination (
           &auditor_sig))
     {
       TALER_ARL_report (report_denominations_without_sigs,
-                        json_pack ("{s:o, s:o, s:o, s:o}",
-                                   "denomination",
-                                   GNUNET_JSON_from_data_auto (
-                                     &issue->denom_hash),
-                                   "value",
-                                   TALER_JSON_from_amount (&coin_value),
-                                   "start_time",
-                                   TALER_ARL_json_from_time_abs_nbo (
-                                     issue->start),
-                                   "end_time",
-                                   TALER_ARL_json_from_time_abs_nbo (
-                                     issue->expire_legal)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_data_auto ("denomination",
+                                                      &issue->denom_hash),
+                          TALER_JSON_pack_amount ("value",
+                                                  &coin_value),
+                          TALER_JSON_pack_time_abs_nbo_human ("start_time",
+                                                              issue->start),
+                          TALER_JSON_pack_time_abs_nbo_human ("end_time",
+                                                              issue->
+                                                              expire_legal)));
     }
   }
 }
@@ -2533,8 +2554,6 @@ run (void *cls,
      const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  json_t *report;
-
   (void) cls;
   (void) args;
   (void) cfgfile;
@@ -2543,7 +2562,7 @@ run (void *cls,
   if (GNUNET_OK !=
       TALER_ARL_init (c))
   {
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -2617,121 +2636,92 @@ run (void *cls,
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Audit complete\n");
-  report = json_pack ("{s:o, s:o, s:o, s:o, s:o,"
-                      " s:o, s:o, s:o, s:o, s:o,"
-                      " s:o, s:o, s:o, s:o, s:o,"
-                      " s:o, s:o, s:o, s:o, s:o,"
-                      " s:I, s:I, s:I, s:I, s:I,"
-                      " s:I, s:I, s:I, s:I, s:I,"
-                      " s:I, s:I, s:o, s:o, s:o,"
-                      " s:o}",
-                      /* Block #1 */
-                      "total_escrow_balance",
-                      TALER_JSON_from_amount (&total_escrow_balance),
-                      "total_active_risk",
-                      TALER_JSON_from_amount (&total_risk),
-                      "total_deposit_fee_income",
-                      TALER_JSON_from_amount (
-                        &total_deposit_fee_income),
-                      "total_melt_fee_income",
-                      TALER_JSON_from_amount (&total_melt_fee_income),
-                      "total_refund_fee_income",
-                      TALER_JSON_from_amount (
-                        &total_refund_fee_income),
-                      /* Block #2 */
-                      /* Tested in test-auditor.sh #18 */
-                      "emergencies",
-                      report_emergencies,
-                      /* Tested in test-auditor.sh #18 */
-                      "emergencies_risk_by_amount",
-                      TALER_JSON_from_amount (
-                        &reported_emergency_risk_by_amount),
-                      /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
-                      "bad_sig_losses",
-                      report_bad_sig_losses,
-                      /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
-                      "total_bad_sig_loss",
-                      TALER_JSON_from_amount (&total_bad_sig_loss),
-                      /* Tested in test-auditor.sh #31 */
-                      "row_inconsistencies",
-                      report_row_inconsistencies,
-                      /* Block #3 */
-                      /* Tested in test-auditor.sh #18 */
-                      "amount_arithmetic_inconsistencies",
-                      report_amount_arithmetic_inconsistencies,
-                      "total_arithmetic_delta_plus",
-                      TALER_JSON_from_amount (
-                        &total_arithmetic_delta_plus),
-                      "total_arithmetic_delta_minus",
-                      TALER_JSON_from_amount (
-                        &total_arithmetic_delta_minus),
-                      /* Tested in test-auditor.sh #12 */
-                      "total_refresh_hanging",
-                      TALER_JSON_from_amount (&total_refresh_hanging),
-                      /* Tested in test-auditor.sh #12 */
-                      "refresh_hanging",
-                      report_refreshs_hanging,
-                      /* Block #4 */
-                      "total_recoup_loss",
-                      TALER_JSON_from_amount (&total_recoup_loss),
-                      /* Tested in test-auditor.sh #18 */
-                      "emergencies_by_count",
-                      report_emergencies_by_count,
-                      /* Tested in test-auditor.sh #18 */
-                      "emergencies_risk_by_count",
-                      TALER_JSON_from_amount (
-                        &reported_emergency_risk_by_count),
-                      /* Tested in test-auditor.sh #18 */
-                      "emergencies_loss",
-                      TALER_JSON_from_amount (
-                        &reported_emergency_loss),
-                      /* Tested in test-auditor.sh #18 */
-                      "emergencies_loss_by_count",
-                      TALER_JSON_from_amount (
-                        &reported_emergency_loss_by_count),
-                      /* Block #5 */
-                      "start_ppc_withdraw_serial_id",
-                      (json_int_t) ppc_start.last_withdraw_serial_id,
-                      "start_ppc_deposit_serial_id",
-                      (json_int_t) ppc_start.last_deposit_serial_id,
-                      "start_ppc_melt_serial_id",
-                      (json_int_t) ppc_start.last_melt_serial_id,
-                      "start_ppc_refund_serial_id",
-                      (json_int_t) ppc_start.last_refund_serial_id,
-                      "start_ppc_recoup_serial_id",
-                      (json_int_t) ppc_start.last_recoup_serial_id,
-                      /* Block #6 */
-                      "start_ppc_recoup_refresh_serial_id",
-                      (json_int_t) ppc_start.
-                      last_recoup_refresh_serial_id,
-                      "end_ppc_withdraw_serial_id",
-                      (json_int_t) ppc.last_withdraw_serial_id,
-                      "end_ppc_deposit_serial_id",
-                      (json_int_t) ppc.last_deposit_serial_id,
-                      "end_ppc_melt_serial_id",
-                      (json_int_t) ppc.last_melt_serial_id,
-                      "end_ppc_refund_serial_id",
-                      (json_int_t) ppc.last_refund_serial_id,
-                      /* Block #7 */
-                      "end_ppc_recoup_serial_id",
-                      (json_int_t) ppc.last_recoup_serial_id,
-                      "end_ppc_recoup_refresh_serial_id",
-                      (json_int_t) ppc.last_recoup_refresh_serial_id,
-                      "auditor_start_time",
-                      TALER_ARL_json_from_time_abs (
-                        start_time),
-                      "auditor_end_time",
-                      TALER_ARL_json_from_time_abs (
-                        GNUNET_TIME_absolute_get ()),
-                      "total_irregular_recoups",
-                      TALER_JSON_from_amount (
-                        &total_irregular_recoups),
-                      /* Block #8 */
-                      "unsigned_denominations",
-                      report_denominations_without_sigs
-                      );
-  GNUNET_break (NULL != report);
-  TALER_ARL_done (report);
+  TALER_ARL_done (
+    GNUNET_JSON_PACK (
+      TALER_JSON_pack_amount ("total_escrow_balance",
+                              &total_escrow_balance),
+      TALER_JSON_pack_amount ("total_active_risk",
+                              &total_risk),
+      TALER_JSON_pack_amount ("total_deposit_fee_income",
+                              &total_deposit_fee_income),
+      TALER_JSON_pack_amount ("total_melt_fee_income",
+                              &total_melt_fee_income),
+      TALER_JSON_pack_amount ("total_refund_fee_income",
+                              &total_refund_fee_income),
+      /* Tested in test-auditor.sh #18 */
+      GNUNET_JSON_pack_array_steal ("emergencies",
+                                    report_emergencies),
+      /* Tested in test-auditor.sh #18 */
+      TALER_JSON_pack_amount ("emergencies_risk_by_amount",
+                              &reported_emergency_risk_by_amount),
+      /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
+      GNUNET_JSON_pack_array_steal ("bad_sig_losses",
+                                    report_bad_sig_losses),
+      /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */
+      TALER_JSON_pack_amount ("total_bad_sig_loss",
+                              &total_bad_sig_loss),
+      /* Tested in test-auditor.sh #31 */
+      GNUNET_JSON_pack_array_steal ("row_inconsistencies",
+                                    report_row_inconsistencies),
+      /* Tested in test-auditor.sh #18 */
+      GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies",
+                                    report_amount_arithmetic_inconsistencies),
+      TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
+                              &total_arithmetic_delta_plus),
+      TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
+                              &total_arithmetic_delta_minus),
+      TALER_JSON_pack_amount ("total_refresh_hanging",
+                              &total_refresh_hanging),
+      /* Tested in test-auditor.sh #12 */
+      GNUNET_JSON_pack_array_steal ("refresh_hanging",
+                                    report_refreshs_hanging),
+      TALER_JSON_pack_amount ("total_recoup_loss",
+                              &total_recoup_loss),
+      /* Tested in test-auditor.sh #18 */
+      GNUNET_JSON_pack_array_steal ("emergencies_by_count",
+                                    report_emergencies_by_count),
+      /* Tested in test-auditor.sh #18 */
+      TALER_JSON_pack_amount ("emergencies_risk_by_count",
+                              &reported_emergency_risk_by_count),
+      /* Tested in test-auditor.sh #18 */
+      TALER_JSON_pack_amount ("emergencies_loss",
+                              &reported_emergency_loss),
+      /* Tested in test-auditor.sh #18 */
+      TALER_JSON_pack_amount ("emergencies_loss_by_count",
+                              &reported_emergency_loss_by_count),
+      GNUNET_JSON_pack_uint64 ("start_ppc_withdraw_serial_id",
+                               ppc_start.last_withdraw_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppc_deposit_serial_id",
+                               ppc_start.last_deposit_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppc_melt_serial_id",
+                               ppc_start.last_melt_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppc_refund_serial_id",
+                               ppc_start.last_refund_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppc_recoup_serial_id",
+                               ppc_start.last_recoup_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppc_recoup_refresh_serial_id",
+                               ppc_start.
+                               last_recoup_refresh_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppc_withdraw_serial_id",
+                               ppc.last_withdraw_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppc_deposit_serial_id",
+                               ppc.last_deposit_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppc_melt_serial_id",
+                               ppc.last_melt_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppc_refund_serial_id",
+                               ppc.last_refund_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppc_recoup_serial_id",
+                               ppc.last_recoup_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppc_recoup_refresh_serial_id",
+                               ppc.last_recoup_refresh_serial_id),
+      TALER_JSON_pack_time_abs_human ("auditor_start_time",
+                                      start_time),
+      TALER_JSON_pack_time_abs_human ("auditor_end_time",
+                                      GNUNET_TIME_absolute_get ()),
+      TALER_JSON_pack_amount ("total_irregular_recoups",
+                              &total_irregular_recoups),
+      GNUNET_JSON_pack_array_steal ("unsigned_denominations",
+                                    report_denominations_without_sigs)));
 }
 
 
@@ -2769,7 +2759,7 @@ main (int argc,
   if (GNUNET_OK !=
       GNUNET_STRINGS_get_utf8_args (argc, argv,
                                     &argc, &argv))
-    return 4;
+    return EXIT_INVALIDARGUMENT;
   ret = GNUNET_PROGRAM_run (
     argc,
     argv,
@@ -2780,9 +2770,9 @@ main (int argc,
     NULL);
   GNUNET_free_nz ((void *) argv);
   if (GNUNET_SYSERR == ret)
-    return 3;
+    return EXIT_INVALIDARGUMENT;
   if (GNUNET_NO == ret)
-    return 0;
+    return EXIT_SUCCESS;
   return global_ret;
 }
 
diff --git a/src/auditor/taler-helper-auditor-deposits.c 
b/src/auditor/taler-helper-auditor-deposits.c
index a0a86540..17b32f25 100644
--- a/src/auditor/taler-helper-auditor-deposits.c
+++ b/src/auditor/taler-helper-auditor-deposits.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2016-2020 Taler Systems SA
+  Copyright (C) 2016-2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero Public License as published by the Free Software
@@ -146,16 +146,15 @@ test_dc (void *cls,
   }
   /* deposit confirmation missing! report! */
   TALER_ARL_report (report_deposit_confirmation_inconsistencies,
-                    json_pack ("{s:o, s:o, s:I, s:o}",
-                               "timestamp",
-                               TALER_ARL_json_from_time_abs (
-                                 dc->exchange_timestamp),
-                               "amount",
-                               TALER_JSON_from_amount 
(&dc->amount_without_fee),
-                               "rowid",
-                               (json_int_t) serial_id,
-                               "account",
-                               GNUNET_JSON_from_data_auto (&dc->h_wire)));
+                    GNUNET_JSON_PACK (
+                      TALER_JSON_pack_time_abs_human ("timestamp",
+                                                      dc->exchange_timestamp),
+                      TALER_JSON_pack_amount ("amount",
+                                              &dc->amount_without_fee),
+                      GNUNET_JSON_pack_uint64 ("rowid",
+                                               serial_id),
+                      GNUNET_JSON_pack_data_auto ("account",
+                                                  &dc->h_wire)));
   dcc->first_missed_coin_serial = GNUNET_MIN (dcc->first_missed_coin_serial,
                                               serial_id);
   dcc->missed_count++;
@@ -295,7 +294,7 @@ run (void *cls,
   if (GNUNET_OK !=
       TALER_ARL_init (c))
   {
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -306,32 +305,23 @@ run (void *cls,
       TALER_ARL_setup_sessions_and_run (&analyze_deposit_confirmations,
                                         NULL))
   {
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Deposit audit complete\n");
-  {
-    json_t *report;
-
-    report = json_pack ("{s:o, s:I, s:o, s:o, s:o}",
-                        "deposit_confirmation_inconsistencies",
-                        report_deposit_confirmation_inconsistencies,
-                        "missing_deposit_confirmation_count",
-                        (json_int_t) number_missed_deposit_confirmations,
-                        "missing_deposit_confirmation_total",
-                        TALER_JSON_from_amount (
-                          &total_missed_deposit_confirmations),
-                        "auditor_start_time",
-                        TALER_ARL_json_from_time_abs (
-                          start_time),
-                        "auditor_end_time",
-                        TALER_ARL_json_from_time_abs (
-                          GNUNET_TIME_absolute_get ())
-                        );
-    GNUNET_break (NULL != report);
-    TALER_ARL_done (report);
-  }
+  TALER_ARL_done (
+    GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_array_steal ("deposit_confirmation_inconsistencies",
+                                    
report_deposit_confirmation_inconsistencies),
+      GNUNET_JSON_pack_uint64 ("missing_deposit_confirmation_count",
+                               number_missed_deposit_confirmations),
+      TALER_JSON_pack_amount ("missing_deposit_confirmation_total",
+                              &total_missed_deposit_confirmations),
+      TALER_JSON_pack_time_abs_human ("auditor_start_time",
+                                      start_time),
+      TALER_JSON_pack_time_abs_human ("auditor_end_time",
+                                      GNUNET_TIME_absolute_get ())));
 }
 
 
@@ -369,7 +359,7 @@ main (int argc,
   if (GNUNET_OK !=
       GNUNET_STRINGS_get_utf8_args (argc, argv,
                                     &argc, &argv))
-    return 4;
+    return EXIT_INVALIDARGUMENT;
   ret = GNUNET_PROGRAM_run (
     argc,
     argv,
@@ -381,9 +371,9 @@ main (int argc,
     NULL);
   GNUNET_free_nz ((void *) argv);
   if (GNUNET_SYSERR == ret)
-    return 3;
+    return EXIT_INVALIDARGUMENT;
   if (GNUNET_NO == ret)
-    return 0;
+    return EXIT_SUCCESS;
   return global_ret;
 }
 
diff --git a/src/auditor/taler-helper-auditor-reserves.c 
b/src/auditor/taler-helper-auditor-reserves.c
index 41580e0c..22d7f5c2 100644
--- a/src/auditor/taler-helper-auditor-reserves.c
+++ b/src/auditor/taler-helper-auditor-reserves.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2016-2020 Taler Systems SA
+  Copyright (C) 2016-2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero Public License as published by the Free Software
@@ -191,12 +191,17 @@ report_amount_arithmetic_inconsistency (
                                exchange);
   }
   TALER_ARL_report (report_amount_arithmetic_inconsistencies,
-                    json_pack ("{s:s, s:I, s:o, s:o, s:I}",
-                               "operation", operation,
-                               "rowid", (json_int_t) rowid,
-                               "exchange", TALER_JSON_from_amount (exchange),
-                               "auditor", TALER_JSON_from_amount (auditor),
-                               "profitable", (json_int_t) profitable));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("operation",
+                                               operation),
+                      GNUNET_JSON_pack_uint64 ("rowid",
+                                               rowid),
+                      TALER_JSON_pack_amount ("exchange",
+                                              exchange),
+                      TALER_JSON_pack_amount ("auditor",
+                                              auditor),
+                      GNUNET_JSON_pack_int64 ("profitable",
+                                              profitable)));
   if (0 != profitable)
   {
     target = (1 == profitable)
@@ -222,10 +227,13 @@ report_row_inconsistency (const char *table,
                           const char *diagnostic)
 {
   TALER_ARL_report (report_row_inconsistencies,
-                    json_pack ("{s:s, s:I, s:s}",
-                               "table", table,
-                               "row", (json_int_t) rowid,
-                               "diagnostic", diagnostic));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("table",
+                                               table),
+                      GNUNET_JSON_pack_uint64 ("row",
+                                               rowid),
+                      GNUNET_JSON_pack_string ("diagnostic",
+                                               diagnostic)));
 }
 
 
@@ -549,14 +557,15 @@ handle_reserve_out (void *cls,
        (expire_withdraw.abs_value_us < execution_date.abs_value_us) )
   {
     TALER_ARL_report (denomination_key_validity_withdraw_inconsistencies,
-                      json_pack ("{s:I, s:o, s:o, s:o}",
-                                 "row", (json_int_t) rowid,
-                                 "execution_date",
-                                 TALER_ARL_json_from_time_abs (execution_date),
-                                 "reserve_pub", GNUNET_JSON_from_data_auto (
-                                   reserve_pub),
-                                 "denompub_h", GNUNET_JSON_from_data_auto (
-                                   &wsrd.h_denomination_pub)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        TALER_JSON_pack_time_abs_human ("execution_date",
+                                                        execution_date),
+                        GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                    reserve_pub),
+                        GNUNET_JSON_pack_data_auto ("denompub_h",
+                                                    
&wsrd.h_denomination_pub)));
   }
 
   /* check reserve_sig (first: setup remaining members of wsrd) */
@@ -569,13 +578,15 @@ handle_reserve_out (void *cls,
                                   &reserve_pub->eddsa_pub))
   {
     TALER_ARL_report (report_bad_sig_losses,
-                      json_pack ("{s:s, s:I, s:o, s:o}",
-                                 "operation", "withdraw",
-                                 "row", (json_int_t) rowid,
-                                 "loss", TALER_JSON_from_amount (
-                                   amount_with_fee),
-                                 "key_pub", GNUNET_JSON_from_data_auto (
-                                   reserve_pub)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("operation",
+                                                 "withdraw"),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        TALER_JSON_pack_amount ("loss",
+                                                amount_with_fee),
+                        GNUNET_JSON_pack_data_auto ("key_pub",
+                                                    reserve_pub)));
     TALER_ARL_amount_add (&total_bad_sig_loss,
                           &total_bad_sig_loss,
                           amount_with_fee);
@@ -712,12 +723,15 @@ handle_recoup_by_reserve (
                                     &coin->coin_pub.eddsa_pub))
     {
       TALER_ARL_report (report_bad_sig_losses,
-                        json_pack ("{s:s, s:I, s:o, s:o}",
-                                   "operation", "recoup",
-                                   "row", (json_int_t) rowid,
-                                   "loss", TALER_JSON_from_amount (amount),
-                                   "key_pub", GNUNET_JSON_from_data_auto (
-                                     &coin->coin_pub)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_string ("operation",
+                                                   "recoup"),
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("loss",
+                                                  amount),
+                          GNUNET_JSON_pack_data_auto ("key_pub",
+                                                      &coin->coin_pub)));
       TALER_ARL_amount_add (&total_bad_sig_loss,
                             &total_bad_sig_loss,
                             amount);
@@ -778,12 +792,15 @@ handle_recoup_by_reserve (
        (0 == strcmp (rev, "master signature invalid")) )
   {
     TALER_ARL_report (report_bad_sig_losses,
-                      json_pack ("{s:s, s:I, s:o, s:o}",
-                                 "operation", "recoup-master",
-                                 "row", (json_int_t) rev_rowid,
-                                 "loss", TALER_JSON_from_amount (amount),
-                                 "key_pub", GNUNET_JSON_from_data_auto (
-                                   &TALER_ARL_master_pub)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("operation",
+                                                 "recoup-master"),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rev_rowid),
+                        TALER_JSON_pack_amount ("loss",
+                                                amount),
+                        GNUNET_JSON_pack_data_auto ("key_pub",
+                                                    &TALER_ARL_master_pub)));
     TALER_ARL_amount_add (&total_bad_sig_loss,
                           &total_bad_sig_loss,
                           amount);
@@ -1051,11 +1068,11 @@ verify_reserve_balance (void *cls,
                           &total_balance_insufficient_loss,
                           &loss);
     TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies,
-                      json_pack ("{s:o, s:o}",
-                                 "reserve_pub",
-                                 GNUNET_JSON_from_data_auto (&rs->reserve_pub),
-                                 "loss",
-                                 TALER_JSON_from_amount (&loss)));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                    &rs->reserve_pub),
+                        TALER_JSON_pack_amount ("loss",
+                                                &loss)));
     /* Continue with a reserve balance of zero */
     GNUNET_assert (GNUNET_OK ==
                    TALER_amount_set_zero (balance.currency,
@@ -1083,12 +1100,11 @@ verify_reserve_balance (void *cls,
          not an actualized gain and could be trivially corrected by
          restoring the summary. *///
       TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies,
-                        json_pack ("{s:o, s:o}",
-                                   "reserve_pub",
-                                   GNUNET_JSON_from_data_auto (
-                                     &rs->reserve_pub),
-                                   "gain",
-                                   TALER_JSON_from_amount (&nbalance)));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                      &rs->reserve_pub),
+                          TALER_JSON_pack_amount ("gain",
+                                                  &nbalance)));
       if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
       {
         GNUNET_break (0);
@@ -1126,14 +1142,13 @@ verify_reserve_balance (void *cls,
                                 &delta);
         }
         TALER_ARL_report (report_reserve_balance_summary_wrong_inconsistencies,
-                          json_pack ("{s:o, s:o, s:o}",
-                                     "reserve_pub",
-                                     GNUNET_JSON_from_data_auto (
-                                       &rs->reserve_pub),
-                                     "exchange",
-                                     TALER_JSON_from_amount (&reserve.balance),
-                                     "auditor",
-                                     TALER_JSON_from_amount (&nbalance)));
+                          GNUNET_JSON_PACK (
+                            GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                        &rs->reserve_pub),
+                            TALER_JSON_pack_amount ("exchange",
+                                                    &reserve.balance),
+                            TALER_JSON_pack_amount ("auditor",
+                                                    &nbalance)));
       }
     }
   } /* end of 'if (internal_checks)' */
@@ -1160,16 +1175,15 @@ verify_reserve_balance (void *cls,
         TALER_ARL_amount_add (&total_balance_reserve_not_closed,
                               &total_balance_reserve_not_closed,
                               &nbalance);
-        TALER_ARL_report (report_reserve_not_closed_inconsistencies,
-                          json_pack ("{s:o, s:o, s:o}",
-                                     "reserve_pub",
-                                     GNUNET_JSON_from_data_auto (
-                                       &rs->reserve_pub),
-                                     "balance",
-                                     TALER_JSON_from_amount (&nbalance),
-                                     "expiration_time",
-                                     TALER_ARL_json_from_time_abs (
-                                       rs->a_expiration_date)));
+        TALER_ARL_report (
+          report_reserve_not_closed_inconsistencies,
+          GNUNET_JSON_PACK (
+            GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                        &rs->reserve_pub),
+            TALER_JSON_pack_amount ("balance",
+                                    &nbalance),
+            TALER_JSON_pack_time_abs_human ("expiration_time",
+                                            rs->a_expiration_date)));
       }
     }
     else
@@ -1179,17 +1193,15 @@ verify_reserve_balance (void *cls,
                             &total_balance_reserve_not_closed,
                             &nbalance);
       TALER_ARL_report (report_reserve_not_closed_inconsistencies,
-                        json_pack ("{s:o, s:o, s:o, s:s}",
-                                   "reserve_pub",
-                                   GNUNET_JSON_from_data_auto (
-                                     &rs->reserve_pub),
-                                   "balance",
-                                   TALER_JSON_from_amount (&nbalance),
-                                   "expiration_time",
-                                   TALER_ARL_json_from_time_abs (
-                                     rs->a_expiration_date),
-                                   "diagnostic",
-                                   "could not determine closing fee"));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                      &rs->reserve_pub),
+                          TALER_JSON_pack_amount ("balance",
+                                                  &nbalance),
+                          TALER_JSON_pack_time_abs_human ("expiration_time",
+                                                          
rs->a_expiration_date),
+                          GNUNET_JSON_pack_string ("diagnostic",
+                                                   "could not determine 
closing fee")));
     }
   }
 
@@ -1489,7 +1501,7 @@ run (void *cls,
   if (GNUNET_OK !=
       TALER_ARL_init (c))
   {
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
   if (GNUNET_OK !=
@@ -1501,7 +1513,7 @@ run (void *cls,
     GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
                                "exchangedb",
                                "IDLE_RESERVE_EXPIRATION_TIME");
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1559,103 +1571,77 @@ run (void *cls,
       TALER_ARL_setup_sessions_and_run (&analyze_reserves,
                                         NULL))
   {
-    global_ret = 1;
+    global_ret = EXIT_FAILURE;
     return;
   }
-  {
-    json_t *report;
-
-    report = json_pack ("{s:o, s:o, s:o, s:o, s:o,"
-                        " s:o, s:o, s:o, s:o, s:o,"
-                        " s:o, s:o, s:o, s:o, s:o,"
-                        " s:o, s:o, s:o, s:o, s:I,"
-                        " s:I, s:I, s:I, s:I, s:I,"
-                        " s:I, s:I }",
-                        /* blocks #1 */
-                        "reserve_balance_insufficient_inconsistencies",
-                        report_reserve_balance_insufficient_inconsistencies,
-                        /* Tested in test-auditor.sh #3 */
-                        "total_loss_balance_insufficient",
-                        TALER_JSON_from_amount (
-                          &total_balance_insufficient_loss),
-                        /* Tested in test-auditor.sh #3 */
-                        "reserve_balance_summary_wrong_inconsistencies",
-                        report_reserve_balance_summary_wrong_inconsistencies,
-                        "total_balance_summary_delta_plus",
-                        TALER_JSON_from_amount (
-                          &total_balance_summary_delta_plus),
-                        "total_balance_summary_delta_minus",
-                        TALER_JSON_from_amount (
-                          &total_balance_summary_delta_minus),
-                        /* blocks #2 */
-                        "total_escrow_balance",
-                        TALER_JSON_from_amount (&total_escrow_balance),
-                        "total_withdraw_fee_income",
-                        TALER_JSON_from_amount (
-                          &total_withdraw_fee_income),
-                        /* Tested in test-auditor.sh #21 */
-                        "reserve_not_closed_inconsistencies",
-                        report_reserve_not_closed_inconsistencies,
-                        /* Tested in test-auditor.sh #21 */
-                        "total_balance_reserve_not_closed",
-                        TALER_JSON_from_amount (
-                          &total_balance_reserve_not_closed),
-                        /* Tested in test-auditor.sh #7 */
-                        "bad_sig_losses",
-                        report_bad_sig_losses,
-                        /* blocks #3 */
-                        /* Tested in test-auditor.sh #7 */
-                        "total_bad_sig_loss",
-                        TALER_JSON_from_amount (&total_bad_sig_loss),
-                        /* Tested in test-revocation.sh #4 */
-                        "row_inconsistencies",
-                        report_row_inconsistencies,
-                        /* Tested in test-auditor.sh #23 */
-                        "denomination_key_validity_withdraw_inconsistencies",
-                        denomination_key_validity_withdraw_inconsistencies,
-                        "amount_arithmetic_inconsistencies",
-                        report_amount_arithmetic_inconsistencies,
-                        "total_arithmetic_delta_plus",
-                        TALER_JSON_from_amount (
-                          &total_arithmetic_delta_plus),
-                        /* blocks #4 */
-                        "total_arithmetic_delta_minus",
-                        TALER_JSON_from_amount (
-                          &total_arithmetic_delta_minus),
-                        "auditor_start_time",
-                        TALER_ARL_json_from_time_abs (
-                          start_time),
-                        "auditor_end_time",
-                        TALER_ARL_json_from_time_abs (
-                          GNUNET_TIME_absolute_get ()),
-                        "total_irregular_recoups",
-                        TALER_JSON_from_amount (
-                          &total_irregular_recoups),
-                        "start_ppr_reserve_in_serial_id",
-                        (json_int_t) ppr_start.last_reserve_in_serial_id,
-                        /* blocks #5 */
-                        "start_ppr_reserve_out_serial_id",
-                        (json_int_t) ppr_start.
-                        last_reserve_out_serial_id,
-                        "start_ppr_reserve_recoup_serial_id",
-                        (json_int_t) ppr_start.
-                        last_reserve_recoup_serial_id,
-                        "start_ppr_reserve_close_serial_id",
-                        (json_int_t) ppr_start.
-                        last_reserve_close_serial_id,
-                        "end_ppr_reserve_in_serial_id",
-                        (json_int_t) ppr.last_reserve_in_serial_id,
-                        "end_ppr_reserve_out_serial_id",
-                        (json_int_t) ppr.last_reserve_out_serial_id,
-                        /* blocks #6 */
-                        "end_ppr_reserve_recoup_serial_id",
-                        (json_int_t) ppr.last_reserve_recoup_serial_id,
-                        "end_ppr_reserve_close_serial_id",
-                        (json_int_t) ppr.last_reserve_close_serial_id
-                        );
-    GNUNET_break (NULL != report);
-    TALER_ARL_done (report);
-  }
+  TALER_ARL_done (
+    GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_array_steal (
+        "reserve_balance_insufficient_inconsistencies",
+        report_reserve_balance_insufficient_inconsistencies),
+      /* Tested in test-auditor.sh #3 */
+      TALER_JSON_pack_amount ("total_loss_balance_insufficient",
+                              &total_balance_insufficient_loss),
+      /* Tested in test-auditor.sh #3 */
+      GNUNET_JSON_pack_array_steal (
+        "reserve_balance_summary_wrong_inconsistencies",
+        report_reserve_balance_summary_wrong_inconsistencies),
+      TALER_JSON_pack_amount ("total_balance_summary_delta_plus",
+                              &total_balance_summary_delta_plus),
+      TALER_JSON_pack_amount ("total_balance_summary_delta_minus",
+                              &total_balance_summary_delta_minus),
+      /* blocks #2 */
+      TALER_JSON_pack_amount ("total_escrow_balance",
+                              &total_escrow_balance),
+      TALER_JSON_pack_amount ("total_withdraw_fee_income",
+                              &total_withdraw_fee_income),
+      /* Tested in test-auditor.sh #21 */
+      GNUNET_JSON_pack_array_steal ("reserve_not_closed_inconsistencies",
+                                    report_reserve_not_closed_inconsistencies),
+      /* Tested in test-auditor.sh #21 */
+      TALER_JSON_pack_amount ("total_balance_reserve_not_closed",
+                              &total_balance_reserve_not_closed),
+      /* Tested in test-auditor.sh #7 */
+      GNUNET_JSON_pack_array_steal ("bad_sig_losses",
+                                    report_bad_sig_losses),
+      /* Tested in test-auditor.sh #7 */
+      TALER_JSON_pack_amount ("total_bad_sig_loss",
+                              &total_bad_sig_loss),
+      /* Tested in test-revocation.sh #4 */
+      GNUNET_JSON_pack_array_steal ("row_inconsistencies",
+                                    report_row_inconsistencies),
+      /* Tested in test-auditor.sh #23 */
+      GNUNET_JSON_pack_array_steal (
+        "denomination_key_validity_withdraw_inconsistencies",
+        denomination_key_validity_withdraw_inconsistencies),
+      GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies",
+                                    report_amount_arithmetic_inconsistencies),
+      TALER_JSON_pack_amount ("total_arithmetic_delta_plus",
+                              &total_arithmetic_delta_plus),
+      TALER_JSON_pack_amount ("total_arithmetic_delta_minus",
+                              &total_arithmetic_delta_minus),
+      TALER_JSON_pack_time_abs_human ("auditor_start_time",
+                                      start_time),
+      TALER_JSON_pack_time_abs_human ("auditor_end_time",
+                                      GNUNET_TIME_absolute_get ()),
+      TALER_JSON_pack_amount ("total_irregular_recoups",
+                              &total_irregular_recoups),
+      GNUNET_JSON_pack_uint64 ("start_ppr_reserve_in_serial_id",
+                               ppr_start.last_reserve_in_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppr_reserve_out_serial_id",
+                               ppr_start.last_reserve_out_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppr_reserve_recoup_serial_id",
+                               ppr_start.last_reserve_recoup_serial_id),
+      GNUNET_JSON_pack_uint64 ("start_ppr_reserve_close_serial_id",
+                               ppr_start.last_reserve_close_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppr_reserve_in_serial_id",
+                               ppr.last_reserve_in_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppr_reserve_out_serial_id",
+                               ppr.last_reserve_out_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppr_reserve_recoup_serial_id",
+                               ppr.last_reserve_recoup_serial_id),
+      GNUNET_JSON_pack_uint64 ("end_ppr_reserve_close_serial_id",
+                               ppr.last_reserve_close_serial_id)));
 }
 
 
@@ -1693,7 +1679,7 @@ main (int argc,
   if (GNUNET_OK !=
       GNUNET_STRINGS_get_utf8_args (argc, argv,
                                     &argc, &argv))
-    return 4;
+    return EXIT_INVALIDARGUMENT;
   ret = GNUNET_PROGRAM_run (
     argc,
     argv,
@@ -1704,9 +1690,9 @@ main (int argc,
     NULL);
   GNUNET_free_nz ((void *) argv);
   if (GNUNET_SYSERR == ret)
-    return 3;
+    return EXIT_INVALIDARGUMENT;
   if (GNUNET_NO == ret)
-    return 0;
+    return EXIT_SUCCESS;
   return global_ret;
 }
 
diff --git a/src/auditor/taler-helper-auditor-wire.c 
b/src/auditor/taler-helper-auditor-wire.c
index 93834f46..c0b25eed 100644
--- a/src/auditor/taler-helper-auditor-wire.c
+++ b/src/auditor/taler-helper-auditor-wire.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2017-2020 Taler Systems SA
+  Copyright (C) 2017-2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU General Public License as published by the Free Software
@@ -457,93 +457,69 @@ do_shutdown (void *cls)
   (void) cls;
   if (NULL != report_row_inconsistencies)
   {
-    json_t *report;
-
     GNUNET_assert (NULL != report_row_minor_inconsistencies);
-    report = json_pack ("{s:o, s:o, s:o, s:o, s:o,"
-                        " s:o, s:o, s:o, s:o, s:o,"
-                        " s:o, s:o, s:o, s:o, s:o,"
-                        " s:o, s:o, s:o, s:I, s:I,"
-                        " s:o, s:o, s:o }",
-                        /* blocks of 5 */
-                        /* Tested in test-auditor.sh #11, #15, #20 */
-                        "wire_out_amount_inconsistencies",
-                        report_wire_out_inconsistencies,
-                        "total_wire_out_delta_plus",
-                        TALER_JSON_from_amount (
-                          &total_bad_amount_out_plus),
-                        /* Tested in test-auditor.sh #11, #15, #19 */
-                        "total_wire_out_delta_minus",
-                        TALER_JSON_from_amount (
-                          &total_bad_amount_out_minus),
-                        /* Tested in test-auditor.sh #2 */
-                        "reserve_in_amount_inconsistencies",
-                        report_reserve_in_inconsistencies,
-                        /* Tested in test-auditor.sh #2 */
-                        "total_wire_in_delta_plus",
-                        TALER_JSON_from_amount (
-                          &total_bad_amount_in_plus),
-                        /* block */
-                        /* Tested in test-auditor.sh #3 */
-                        "total_wire_in_delta_minus",
-                        TALER_JSON_from_amount (
-                          &total_bad_amount_in_minus),
-                        /* Tested in test-auditor.sh #9 */
-                        "missattribution_in_inconsistencies",
-                        report_missattribution_in_inconsistencies,
-                        /* Tested in test-auditor.sh #9 */
-                        "total_missattribution_in",
-                        TALER_JSON_from_amount (
-                          &total_missattribution_in),
-                        "row_inconsistencies",
-                        report_row_inconsistencies,
-                        /* Tested in test-auditor.sh #10/#17 */
-                        "row_minor_inconsistencies",
-                        report_row_minor_inconsistencies,
-                        /* block */
-                        /* Tested in test-auditor.sh #19 */
-                        "total_wire_format_amount",
-                        TALER_JSON_from_amount (
-                          &total_wire_format_amount),
-                        /* Tested in test-auditor.sh #19 */
-                        "wire_format_inconsistencies",
-                        report_wire_format_inconsistencies,
-                        /* Tested in test-auditor.sh #1 */
-                        "total_amount_lag",
-                        TALER_JSON_from_amount (&total_amount_lag),
-                        /* Tested in test-auditor.sh #1 */
-                        "lag_details",
-                        report_lags,
-                        /* Tested in test-auditor.sh #22 */
-                        "total_closure_amount_lag",
-                        TALER_JSON_from_amount (
-                          &total_closure_amount_lag),
-                        /* blocks of 5 */
-                        /* Tested in test-auditor.sh #22 */
-                        "reserve_lag_details",
-                        report_closure_lags,
-                        "wire_auditor_start_time",
-                        TALER_ARL_json_from_time_abs (
-                          start_time),
-                        "wire_auditor_end_time",
-                        TALER_ARL_json_from_time_abs (
-                          GNUNET_TIME_absolute_get ()),
-                        "start_pp_reserve_close_uuid",
-                        (json_int_t) start_pp.last_reserve_close_uuid,
-                        "end_pp_reserve_close_uuid",
-                        (json_int_t) pp.last_reserve_close_uuid,
-                        /* blocks of 5 */
-                        "start_pp_last_timestamp",
-                        TALER_ARL_json_from_time_abs (
-                          start_pp.last_timestamp),
-                        "end_pp_last_timestamp",
-                        TALER_ARL_json_from_time_abs (
-                          pp.last_timestamp),
-                        "account_progress",
-                        report_account_progress
-                        );
-    GNUNET_break (NULL != report);
-    TALER_ARL_done (report);
+    TALER_ARL_done (
+      GNUNET_JSON_PACK (
+        /* Tested in test-auditor.sh #11, #15, #20 */
+        GNUNET_JSON_pack_array_steal ("wire_out_amount_inconsistencies",
+                                      report_wire_out_inconsistencies),
+        TALER_JSON_pack_amount ("total_wire_out_delta_plus",
+                                &total_bad_amount_out_plus),
+        /* Tested in test-auditor.sh #11, #15, #19 */
+        TALER_JSON_pack_amount ("total_wire_out_delta_minus",
+                                &total_bad_amount_out_minus),
+        /* Tested in test-auditor.sh #2 */
+        GNUNET_JSON_pack_array_steal ("reserve_in_amount_inconsistencies",
+                                      report_reserve_in_inconsistencies),
+        /* Tested in test-auditor.sh #2 */
+        TALER_JSON_pack_amount ("total_wire_in_delta_plus",
+                                &total_bad_amount_in_plus),
+        /* Tested in test-auditor.sh #3 */
+        TALER_JSON_pack_amount ("total_wire_in_delta_minus",
+                                &total_bad_amount_in_minus),
+        /* Tested in test-auditor.sh #9 */
+        GNUNET_JSON_pack_array_steal ("missattribution_in_inconsistencies",
+                                      
report_missattribution_in_inconsistencies),
+        /* Tested in test-auditor.sh #9 */
+        TALER_JSON_pack_amount ("total_missattribution_in",
+                                &total_missattribution_in),
+        GNUNET_JSON_pack_array_steal ("row_inconsistencies",
+                                      report_row_inconsistencies),
+        /* Tested in test-auditor.sh #10/#17 */
+        GNUNET_JSON_pack_array_steal ("row_minor_inconsistencies",
+                                      report_row_minor_inconsistencies),
+        /* Tested in test-auditor.sh #19 */
+        TALER_JSON_pack_amount ("total_wire_format_amount",
+                                &total_wire_format_amount),
+        /* Tested in test-auditor.sh #19 */
+        GNUNET_JSON_pack_array_steal ("wire_format_inconsistencies",
+                                      report_wire_format_inconsistencies),
+        /* Tested in test-auditor.sh #1 */
+        TALER_JSON_pack_amount ("total_amount_lag",
+                                &total_amount_lag),
+        /* Tested in test-auditor.sh #1 */
+        GNUNET_JSON_pack_array_steal ("lag_details",
+                                      report_lags),
+        /* Tested in test-auditor.sh #22 */
+        TALER_JSON_pack_amount ("total_closure_amount_lag",
+                                &total_closure_amount_lag),
+        /* Tested in test-auditor.sh #22 */
+        GNUNET_JSON_pack_array_steal ("reserve_lag_details",
+                                      report_closure_lags),
+        TALER_JSON_pack_time_abs_human ("wire_auditor_start_time",
+                                        start_time),
+        TALER_JSON_pack_time_abs_human ("wire_auditor_end_time",
+                                        GNUNET_TIME_absolute_get ()),
+        GNUNET_JSON_pack_uint64 ("start_pp_reserve_close_uuid",
+                                 start_pp.last_reserve_close_uuid),
+        GNUNET_JSON_pack_uint64 ("end_pp_reserve_close_uuid",
+                                 pp.last_reserve_close_uuid),
+        TALER_JSON_pack_time_abs_human ("start_pp_last_timestamp",
+                                        start_pp.last_timestamp),
+        TALER_JSON_pack_time_abs_human ("end_pp_last_timestamp",
+                                        pp.last_timestamp),
+        GNUNET_JSON_pack_array_steal ("account_progress",
+                                      report_account_progress)));
     report_wire_out_inconsistencies = NULL;
     report_reserve_in_inconsistencies = NULL;
     report_row_inconsistencies = NULL;
@@ -639,13 +615,17 @@ check_pending_rc (void *cls,
   if ( (0 != rc->amount.value) ||
        (0 != rc->amount.fraction) )
     TALER_ARL_report (report_closure_lags,
-                      json_pack ("{s:I, s:o, s:o, s:o, s:s}",
-                                 "row", (json_int_t) rc->rowid,
-                                 "amount", TALER_JSON_from_amount 
(&rc->amount),
-                                 "deadline", TALER_ARL_json_from_time_abs (
-                                   rc->execution_date),
-                                 "wtid", GNUNET_JSON_from_data_auto 
(&rc->wtid),
-                                 "account", rc->receiver_account));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rc->rowid),
+                        TALER_JSON_pack_amount ("amount",
+                                                &rc->amount),
+                        TALER_JSON_pack_time_abs_human ("deadline",
+                                                        rc->execution_date),
+                        GNUNET_JSON_pack_data_auto ("wtid",
+                                                    &rc->wtid),
+                        GNUNET_JSON_pack_string ("account",
+                                                 rc->receiver_account)));
   pp.last_reserve_close_uuid
     = GNUNET_MIN (pp.last_reserve_close_uuid,
                   rc->rowid);
@@ -711,20 +691,19 @@ commit (enum GNUNET_DB_QueryStatus qs)
     GNUNET_assert (0 ==
                    json_array_append_new (
                      report_account_progress,
-                     json_pack (
-                       "{s:s, s:I, s:I, s:I, s:I}",
-                       "account",
-                       wa->section_name,
-                       "start_reserve_in",
-                       (json_int_t) wa->start_pp.last_reserve_in_serial_id,
-                       "end_reserve_in",
-                       (json_int_t) wa->pp.last_reserve_in_serial_id,
-                       "start_wire_out",
-                       (json_int_t) wa->start_pp.last_wire_out_serial_id,
-                       "end_wire_out",
-                       (json_int_t) wa->pp.last_wire_out_serial_id
-                       ))
-                   );
+                     GNUNET_JSON_PACK (
+                       GNUNET_JSON_pack_string ("account",
+                                                wa->section_name),
+                       GNUNET_JSON_pack_uint64 ("start_reserve_in",
+                                                wa->start_pp.
+                                                last_reserve_in_serial_id),
+                       GNUNET_JSON_pack_uint64 ("end_reserve_in",
+                                                
wa->pp.last_reserve_in_serial_id),
+                       GNUNET_JSON_pack_uint64 ("start_wire_out",
+                                                wa->start_pp.
+                                                last_wire_out_serial_id),
+                       GNUNET_JSON_pack_uint64 ("end_wire_out",
+                                                
wa->pp.last_wire_out_serial_id))));
     if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == wa->qsx)
       qs = TALER_ARL_adb->update_wire_auditor_account_progress (
         TALER_ARL_adb->cls,
@@ -862,22 +841,24 @@ wire_missing_cb (void *cls,
                               &tiny_amount))
       return; /* acceptable, amount was tiny */
   }
-  rep = json_pack ("{s:I, s:o, s:o, s:o, s:O}",
-                   "row", (json_int_t) rowid,
-                   "amount", TALER_JSON_from_amount (amount),
-                   "deadline", TALER_ARL_json_from_time_abs (
-                     deadline),
-                   "coin_pub", GNUNET_JSON_from_data_auto (
-                     coin_pub),
-                   "account", wire);
-  GNUNET_break (NULL != rep);
+  rep = GNUNET_JSON_PACK (
+    GNUNET_JSON_pack_uint64 ("row",
+                             rowid),
+    TALER_JSON_pack_amount ("amount",
+                            amount),
+    TALER_JSON_pack_time_abs_human ("deadline",
+                                    deadline),
+    GNUNET_JSON_pack_data_auto ("coin_pub",
+                                coin_pub),
+    GNUNET_JSON_pack_object_incref ("account",
+                                    (json_t *) wire));
   if (internal_checks)
   {
     /* the 'done' bit is only useful in 'internal' mode */
-    GNUNET_break (0 ==
-                  json_object_set (rep,
-                                   "claimed_done",
-                                   json_string ((done) ? "yes" : "no")));
+    GNUNET_assert (0 ==
+                   json_object_set (rep,
+                                    "claimed_done",
+                                    json_string ((done) ? "yes" : "no")));
   }
   TALER_ARL_report (report_lags,
                     rep);
@@ -969,10 +950,13 @@ check_time_difference (const char *table,
                    GNUNET_STRINGS_relative_time_to_string (delta,
                                                            GNUNET_YES));
   TALER_ARL_report (report_row_minor_inconsistencies,
-                    json_pack ("{s:s, s:I, s:s}",
-                               "table", table,
-                               "row", (json_int_t) rowid,
-                               "diagnostic", details));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_string ("table",
+                                               table),
+                      GNUNET_JSON_pack_uint64 ("row",
+                                               rowid),
+                      GNUNET_JSON_pack_string ("diagnostic",
+                                               details)));
   GNUNET_free (details);
 }
 
@@ -1018,16 +1002,21 @@ wire_out_cb (void *cls,
        This is moderately harmless, it might just be that the aggreator
        has not yet fully caught up with the transfers it should do. */
     TALER_ARL_report (report_wire_out_inconsistencies,
-                      json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}",
-                                 "row", (json_int_t) rowid,
-                                 "amount_wired", TALER_JSON_from_amount 
(&zero),
-                                 "amount_justified", TALER_JSON_from_amount (
-                                   amount),
-                                 "wtid", GNUNET_JSON_from_data_auto (wtid),
-                                 "timestamp", TALER_ARL_json_from_time_abs (
-                                   date),
-                                 "diagnostic", "wire transfer not made (yet?)",
-                                 "account_section", wa->section_name));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        TALER_JSON_pack_amount ("amount_wired",
+                                                &zero),
+                        TALER_JSON_pack_amount ("amount_justified",
+                                                amount),
+                        GNUNET_JSON_pack_data_auto ("wtid",
+                                                    wtid),
+                        TALER_JSON_pack_time_abs_human ("timestamp",
+                                                        date),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "wire transfer not made 
(yet?)"),
+                        GNUNET_JSON_pack_string ("account_section",
+                                                 wa->section_name)));
     TALER_ARL_amount_add (&total_bad_amount_out_minus,
                           &total_bad_amount_out_minus,
                           amount);
@@ -1046,34 +1035,44 @@ wire_out_cb (void *cls,
          we should count the wire transfer as entirely spurious, and
          additionally consider the justified wire transfer as missing. */
       TALER_ARL_report (report_wire_out_inconsistencies,
-                        json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s, s:s}",
-                                   "row", (json_int_t) rowid,
-                                   "amount_wired", TALER_JSON_from_amount (
-                                     &roi->details.amount),
-                                   "amount_justified", TALER_JSON_from_amount (
-                                     &zero),
-                                   "wtid", GNUNET_JSON_from_data_auto (wtid),
-                                   "timestamp", TALER_ARL_json_from_time_abs (
-                                     date),
-                                   "diagnostic", "receiver account mismatch",
-                                   "target", payto_uri,
-                                   "account_section", wa->section_name));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("amount_wired",
+                                                  &roi->details.amount),
+                          TALER_JSON_pack_amount ("amount_justified",
+                                                  &zero),
+                          GNUNET_JSON_pack_data_auto ("wtid", wtid),
+                          TALER_JSON_pack_time_abs_human ("timestamp",
+                                                          date),
+                          GNUNET_JSON_pack_string ("diagnostic",
+                                                   "receiver account 
mismatch"),
+                          GNUNET_JSON_pack_string ("target",
+                                                   payto_uri),
+                          GNUNET_JSON_pack_string ("account_section",
+                                                   wa->section_name)));
       TALER_ARL_amount_add (&total_bad_amount_out_plus,
                             &total_bad_amount_out_plus,
                             &roi->details.amount);
       TALER_ARL_report (report_wire_out_inconsistencies,
-                        json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s, s:s}",
-                                   "row", (json_int_t) rowid,
-                                   "amount_wired", TALER_JSON_from_amount (
-                                     &zero),
-                                   "amount_justified", TALER_JSON_from_amount (
-                                     amount),
-                                   "wtid", GNUNET_JSON_from_data_auto (wtid),
-                                   "timestamp", TALER_ARL_json_from_time_abs (
-                                     date),
-                                   "diagnostic", "receiver account mismatch",
-                                   "target", roi->details.credit_account_url,
-                                   "account_section", wa->section_name));
+                        GNUNET_JSON_PACK (
+                          GNUNET_JSON_pack_uint64 ("row",
+                                                   rowid),
+                          TALER_JSON_pack_amount ("amount_wired",
+                                                  &zero),
+                          TALER_JSON_pack_amount ("amount_justified",
+                                                  amount),
+                          GNUNET_JSON_pack_data_auto ("wtid",
+                                                      wtid),
+                          TALER_JSON_pack_time_abs_human ("timestamp",
+                                                          date),
+                          GNUNET_JSON_pack_string ("diagnostic",
+                                                   "receiver account 
mismatch"),
+                          GNUNET_JSON_pack_string ("target",
+                                                   roi->details.
+                                                   credit_account_url),
+                          GNUNET_JSON_pack_string ("account_section",
+                                                   wa->section_name)));
       TALER_ARL_amount_add (&total_bad_amount_out_minus,
                             &total_bad_amount_out_minus,
                             amount);
@@ -1086,17 +1085,21 @@ wire_out_cb (void *cls,
                              amount))
   {
     TALER_ARL_report (report_wire_out_inconsistencies,
-                      json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}",
-                                 "row", (json_int_t) rowid,
-                                 "amount_justified", TALER_JSON_from_amount (
-                                   amount),
-                                 "amount_wired", TALER_JSON_from_amount (
-                                   &roi->details.amount),
-                                 "wtid", GNUNET_JSON_from_data_auto (wtid),
-                                 "timestamp", TALER_ARL_json_from_time_abs (
-                                   date),
-                                 "diagnostic", "wire amount does not match",
-                                 "account_section", wa->section_name));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        TALER_JSON_pack_amount ("amount_justified",
+                                                amount),
+                        TALER_JSON_pack_amount ("amount_wired",
+                                                &roi->details.amount),
+                        GNUNET_JSON_pack_data_auto ("wtid",
+                                                    wtid),
+                        TALER_JSON_pack_time_abs_human ("timestamp",
+                                                        date),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "wire amount does not match"),
+                        GNUNET_JSON_pack_string ("account_section",
+                                                 wa->section_name)));
     if (0 < TALER_amount_cmp (amount,
                               &roi->details.amount))
     {
@@ -1229,20 +1232,22 @@ complain_out_not_found (void *cls,
   if (GNUNET_YES == ctx.found)
     return GNUNET_OK;
   TALER_ARL_report (report_wire_out_inconsistencies,
-                    json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}",
-                               "row", (json_int_t) 0,
-                               "amount_wired", TALER_JSON_from_amount (
-                                 &roi->details.amount),
-                               "amount_justified", TALER_JSON_from_amount (
-                                 &zero),
-                               "wtid", GNUNET_JSON_from_data_auto (
-                                 &roi->details.wtid),
-                               "timestamp", TALER_ARL_json_from_time_abs (
-                                 roi->details.execution_date),
-                               "account_section",
-                               wa->section_name,
-                               "diagnostic",
-                               "justification for wire transfer not found"));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_uint64 ("row",
+                                               0),
+                      TALER_JSON_pack_amount ("amount_wired",
+                                              &roi->details.amount),
+                      TALER_JSON_pack_amount ("amount_justified",
+                                              &zero),
+                      GNUNET_JSON_pack_data_auto ("wtid",
+                                                  &roi->details.wtid),
+                      TALER_JSON_pack_time_abs_human ("timestamp",
+                                                      roi->details.
+                                                      execution_date),
+                      GNUNET_JSON_pack_string ("account_section",
+                                               wa->section_name),
+                      GNUNET_JSON_pack_string ("diagnostic",
+                                               "justification for wire 
transfer not found")));
   TALER_ARL_amount_add (&total_bad_amount_out_plus,
                         &total_bad_amount_out_plus,
                         &roi->details.amount);
@@ -1379,11 +1384,13 @@ history_debit_cb (void *cls,
                           &total_wire_format_amount,
                           &details->amount);
     TALER_ARL_report (report_wire_format_inconsistencies,
-                      json_pack ("{s:o, s:I, s:s}",
-                                 "amount", TALER_JSON_from_amount (
-                                   &details->amount),
-                                 "wire_offset", (json_int_t) row_off,
-                                 "diagnostic", diagnostic));
+                      GNUNET_JSON_PACK (
+                        TALER_JSON_pack_amount ("amount",
+                                                &details->amount),
+                        GNUNET_JSON_pack_uint64 ("wire_offset",
+                                                 row_off),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 diagnostic)));
     GNUNET_free (diagnostic);
     return GNUNET_OK;
   }
@@ -1518,13 +1525,15 @@ reserve_in_cb (void *cls,
                                          
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
   {
     TALER_ARL_report (report_row_inconsistencies,
-                      json_pack ("{s:s, s:I, s:o, s:s}",
-                                 "table", "reserves_in",
-                                 "row", (json_int_t) rowid,
-                                 "wire_offset_hash",
-                                 GNUNET_JSON_from_data_auto (
-                                   &rii->row_off_hash),
-                                 "diagnostic", "duplicate wire offset"));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("table",
+                                                 "reserves_in"),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        GNUNET_JSON_pack_data_auto ("wire_offset_hash",
+                                                    &rii->row_off_hash),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "duplicate wire offset")));
     GNUNET_free (rii);
     if (TALER_ARL_do_abort ())
       return GNUNET_SYSERR;
@@ -1555,19 +1564,22 @@ complain_in_not_found (void *cls,
 
   (void) key;
   TALER_ARL_report (report_reserve_in_inconsistencies,
-                    json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}",
-                               "row", (json_int_t) rii->rowid,
-                               "amount_exchange_expected",
-                               TALER_JSON_from_amount (
-                                 &rii->details.amount),
-                               "amount_wired", TALER_JSON_from_amount (&zero),
-                               "reserve_pub", GNUNET_JSON_from_data_auto (
-                                 &rii->details.reserve_pub),
-                               "timestamp", TALER_ARL_json_from_time_abs (
-                                 rii->details.execution_date),
-                               "account", wa->section_name,
-                               "diagnostic",
-                               "incoming wire transfer claimed by exchange not 
found"));
+                    GNUNET_JSON_PACK (
+                      GNUNET_JSON_pack_uint64 ("row",
+                                               rii->rowid),
+                      TALER_JSON_pack_amount ("amount_exchange_expected",
+                                              &rii->details.amount),
+                      TALER_JSON_pack_amount ("amount_wired",
+                                              &zero),
+                      GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                  &rii->details.reserve_pub),
+                      TALER_JSON_pack_time_abs_human ("timestamp",
+                                                      rii->details.
+                                                      execution_date),
+                      GNUNET_JSON_pack_string ("account",
+                                               wa->section_name),
+                      GNUNET_JSON_pack_string ("diagnostic",
+                                               "incoming wire transfer claimed 
by exchange not found")));
   TALER_ARL_amount_add (&total_bad_amount_in_minus,
                         &total_bad_amount_in_minus,
                         &rii->details.amount);
@@ -1668,35 +1680,41 @@ history_credit_cb (void *cls,
                           &rii->details.reserve_pub))
   {
     TALER_ARL_report (report_reserve_in_inconsistencies,
-                      json_pack ("{s:I, s:I, s:o, s:o, s:o, s:o, s:s}",
-                                 "row", (json_int_t) rii->rowid,
-                                 "bank_row", (json_int_t) row_off,
-                                 "amount_exchange_expected",
-                                 TALER_JSON_from_amount (
-                                   &rii->details.amount),
-                                 "amount_wired", TALER_JSON_from_amount 
(&zero),
-                                 "reserve_pub", GNUNET_JSON_from_data_auto (
-                                   &rii->details.reserve_pub),
-                                 "timestamp", TALER_ARL_json_from_time_abs (
-                                   rii->details.execution_date),
-                                 "diagnostic", "wire subject does not match"));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rii->rowid),
+                        GNUNET_JSON_pack_uint64 ("bank_row",
+                                                 row_off),
+                        TALER_JSON_pack_amount ("amount_exchange_expected",
+                                                &rii->details.amount),
+                        TALER_JSON_pack_amount ("amount_wired",
+                                                &zero),
+                        GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                    &rii->details.reserve_pub),
+                        TALER_JSON_pack_time_abs_human ("timestamp",
+                                                        rii->details.
+                                                        execution_date),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "wire subject does not 
match")));
     TALER_ARL_amount_add (&total_bad_amount_in_minus,
                           &total_bad_amount_in_minus,
                           &rii->details.amount);
     TALER_ARL_report (report_reserve_in_inconsistencies,
-                      json_pack ("{s:I, s:I, s:o, s:o, s:o, s:o, s:s}",
-                                 "row", (json_int_t) rii->rowid,
-                                 "bank_row", (json_int_t) row_off,
-                                 "amount_exchange_expected",
-                                 TALER_JSON_from_amount (
-                                   &zero),
-                                 "amount_wired", TALER_JSON_from_amount (
-                                   &details->amount),
-                                 "reserve_pub", GNUNET_JSON_from_data_auto (
-                                   &details->reserve_pub),
-                                 "timestamp", TALER_ARL_json_from_time_abs (
-                                   details->execution_date),
-                                 "diagnostic", "wire subject does not match"));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rii->rowid),
+                        GNUNET_JSON_pack_uint64 ("bank_row",
+                                                 row_off),
+                        TALER_JSON_pack_amount ("amount_exchange_expected",
+                                                &zero),
+                        TALER_JSON_pack_amount ("amount_wired",
+                                                &details->amount),
+                        GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                    &details->reserve_pub),
+                        TALER_JSON_pack_time_abs_human ("timestamp",
+                                                        
details->execution_date),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "wire subject does not 
match")));
 
     TALER_ARL_amount_add (&total_bad_amount_in_plus,
                           &total_bad_amount_in_plus,
@@ -1707,19 +1725,21 @@ history_credit_cb (void *cls,
                              &details->amount))
   {
     TALER_ARL_report (report_reserve_in_inconsistencies,
-                      json_pack ("{s:I, s:I, s:o, s:o, s:o, s:o, s:s}",
-                                 "row", (json_int_t) rii->rowid,
-                                 "bank_row", (json_int_t) row_off,
-                                 "amount_exchange_expected",
-                                 TALER_JSON_from_amount (
-                                   &rii->details.amount),
-                                 "amount_wired", TALER_JSON_from_amount (
-                                   &details->amount),
-                                 "reserve_pub", GNUNET_JSON_from_data_auto (
-                                   &details->reserve_pub),
-                                 "timestamp", TALER_ARL_json_from_time_abs (
-                                   details->execution_date),
-                                 "diagnostic", "wire amount does not match"));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rii->rowid),
+                        GNUNET_JSON_pack_uint64 ("bank_row",
+                                                 row_off),
+                        TALER_JSON_pack_amount ("amount_exchange_expected",
+                                                &rii->details.amount),
+                        TALER_JSON_pack_amount ("amount_wired",
+                                                &details->amount),
+                        GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                    &details->reserve_pub),
+                        TALER_JSON_pack_time_abs_human ("timestamp",
+                                                        
details->execution_date),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "wire amount does not 
match")));
     if (0 < TALER_amount_cmp (&details->amount,
                               &rii->details.amount))
     {
@@ -1751,13 +1771,16 @@ history_credit_cb (void *cls,
                        rii->details.debit_account_url))
   {
     TALER_ARL_report (report_missattribution_in_inconsistencies,
-                      json_pack ("{s:o, s:I, s:I, s:o}",
-                                 "amount", TALER_JSON_from_amount (
-                                   &rii->details.amount),
-                                 "row", (json_int_t) rii->rowid,
-                                 "bank_row", (json_int_t) row_off,
-                                 "reserve_pub", GNUNET_JSON_from_data_auto (
-                                   &rii->details.reserve_pub)));
+                      GNUNET_JSON_PACK (
+                        TALER_JSON_pack_amount ("amount",
+                                                &rii->details.amount),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rii->rowid),
+                        GNUNET_JSON_pack_uint64 ("bank_row",
+                                                 row_off),
+                        GNUNET_JSON_pack_data_auto (
+                          "reserve_pub",
+                          &rii->details.reserve_pub)));
     TALER_ARL_amount_add (&total_missattribution_in,
                           &total_missattribution_in,
                           &rii->details.amount);
@@ -1766,11 +1789,15 @@ history_credit_cb (void *cls,
       rii->details.execution_date.abs_value_us)
   {
     TALER_ARL_report (report_row_minor_inconsistencies,
-                      json_pack ("{s:s, s:I, s:I, s:s}",
-                                 "table", "reserves_in",
-                                 "row", (json_int_t) rii->rowid,
-                                 "bank_row", (json_int_t) row_off,
-                                 "diagnostic", "execution date mismatch"));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("table",
+                                                 "reserves_in"),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rii->rowid),
+                        GNUNET_JSON_pack_uint64 ("bank_row",
+                                                 row_off),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "execution date mismatch")));
   }
 cleanup:
   GNUNET_assert (GNUNET_OK ==
@@ -1893,17 +1920,19 @@ reserve_closed_cb (void *cls,
                                      closing_fee))
   {
     TALER_ARL_report (report_row_inconsistencies,
-                      json_pack ("{s:s, s:I, s:o, s:o, s:o, s:s}",
-                                 "table", "reserves_closures",
-                                 "row", (json_int_t) rowid,
-                                 "reserve_pub", GNUNET_JSON_from_data_auto (
-                                   reserve_pub),
-                                 "amount_with_fee", TALER_JSON_from_amount (
-                                   amount_with_fee),
-                                 "closing_fee", TALER_JSON_from_amount (
-                                   closing_fee),
-                                 "diagnostic",
-                                 "closing fee above total amount"));
+                      GNUNET_JSON_PACK (
+                        GNUNET_JSON_pack_string ("table",
+                                                 "reserves_closures"),
+                        GNUNET_JSON_pack_uint64 ("row",
+                                                 rowid),
+                        GNUNET_JSON_pack_data_auto ("reserve_pub",
+                                                    reserve_pub),
+                        TALER_JSON_pack_amount ("amount_with_fee",
+                                                amount_with_fee),
+                        TALER_JSON_pack_amount ("closing_fee",
+                                                closing_fee),
+                        GNUNET_JSON_pack_string ("diagnostic",
+                                                 "closing fee above total 
amount")));
     GNUNET_free (rc);
     if (TALER_ARL_do_abort ())
       return GNUNET_SYSERR;
diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h
index 0cbeba08..f338d44a 100644
--- a/src/include/taler_json_lib.h
+++ b/src/include/taler_json_lib.h
@@ -52,6 +52,19 @@ TALER_JSON_pack_time_abs (const char *name,
                           struct GNUNET_TIME_Absolute at);
 
 
+/**
+ * Generate packer instruction for a JSON field of type
+ * absolute time creating a human-readable timestamp.
+ *
+ * @param name name of the field to add to the object
+ * @param at absolute time to pack
+ * @return json pack specification
+ */
+struct GNUNET_JSON_PackSpec
+TALER_JSON_pack_time_abs_human (const char *name,
+                                struct GNUNET_TIME_Absolute at);
+
+
 /**
  * Generate packer instruction for a JSON field of type
  * absolute time in network byte order.
@@ -66,6 +79,19 @@ TALER_JSON_pack_time_abs_nbo (const char *name,
                               struct GNUNET_TIME_AbsoluteNBO at);
 
 
+/**
+ * Generate packer instruction for a JSON field of type
+ * absolute time creating a human-readable timestamp.
+ *
+ * @param name name of the field to add to the object
+ * @param at absolute time to pack
+ * @return json pack specification
+ */
+struct GNUNET_JSON_PackSpec
+TALER_JSON_pack_time_abs_nbo_human (const char *name,
+                                    struct GNUNET_TIME_AbsoluteNBO at);
+
+
 /**
  * Generate packer instruction for a JSON field of type
  * relative time.
diff --git a/src/json/json_pack.c b/src/json/json_pack.c
index 7a5d22ee..1859e264 100644
--- a/src/json/json_pack.c
+++ b/src/json/json_pack.c
@@ -35,6 +35,20 @@ TALER_JSON_pack_time_abs (const char *name,
 }
 
 
+struct GNUNET_JSON_PackSpec
+TALER_JSON_pack_time_abs_human (const char *name,
+                                struct GNUNET_TIME_Absolute at)
+{
+  struct GNUNET_JSON_PackSpec ps = {
+    .field_name = name,
+    .object = json_string (
+      GNUNET_STRINGS_absolute_time_to_string (at))
+  };
+
+  return ps;
+}
+
+
 struct GNUNET_JSON_PackSpec
 TALER_JSON_pack_time_abs_nbo (const char *name,
                               struct GNUNET_TIME_AbsoluteNBO at)
@@ -44,6 +58,15 @@ TALER_JSON_pack_time_abs_nbo (const char *name,
 }
 
 
+struct GNUNET_JSON_PackSpec
+TALER_JSON_pack_time_abs_nbo_human (const char *name,
+                                    struct GNUNET_TIME_AbsoluteNBO at)
+{
+  return TALER_JSON_pack_time_abs_human (name,
+                                         GNUNET_TIME_absolute_ntoh (at));
+}
+
+
 struct GNUNET_JSON_PackSpec
 TALER_JSON_pack_time_rel (const char *name,
                           struct GNUNET_TIME_Relative rt)

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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