-work on P2P payment details
This commit is contained in:
parent
5dd03fe359
commit
04c32eafb9
@ -361,7 +361,7 @@ TEH_RESPONSE_compile_transaction_history (
|
|||||||
hash and the denomination key's RSA signature over coin_pub, but as
|
hash and the denomination key's RSA signature over coin_pub, but as
|
||||||
the wallet should really already have this information (and cannot
|
the wallet should really already have this information (and cannot
|
||||||
check or do anything with it anyway if it doesn't), it seems
|
check or do anything with it anyway if it doesn't), it seems
|
||||||
strictly unnecessary. *///
|
strictly unnecessary. */
|
||||||
if (0 !=
|
if (0 !=
|
||||||
json_array_append_new (
|
json_array_append_new (
|
||||||
history,
|
history,
|
||||||
@ -420,6 +420,56 @@ TEH_RESPONSE_compile_transaction_history (
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FIXME_PURSE_REFUND
|
||||||
|
case TALER_EXCHANGEDB_TT_PURSE_REFUND:
|
||||||
|
{
|
||||||
|
struct TALER_EXCHANGEDB_PurseRefundListEntry *pr
|
||||||
|
= pos->details.purse_refund;
|
||||||
|
struct TALER_ExchangePublicKeyP epub;
|
||||||
|
struct TALER_ExchangeSignatureP esig;
|
||||||
|
|
||||||
|
if (TALER_EC_NONE !=
|
||||||
|
TALER_exchange_online_purse_refund_sign (
|
||||||
|
&TEH_keys_exchange_sign_,
|
||||||
|
&pr->amount,
|
||||||
|
&pr->refund_fee,
|
||||||
|
&pr->purse_share_fee,
|
||||||
|
&pr->purse_pub,
|
||||||
|
coin_pub,
|
||||||
|
&epub,
|
||||||
|
&esig))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
json_decref (history);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (0 !=
|
||||||
|
json_array_append_new (
|
||||||
|
history,
|
||||||
|
GNUNET_JSON_PACK (
|
||||||
|
GNUNET_JSON_pack_string ("type",
|
||||||
|
"PURSE-REFUND"),
|
||||||
|
TALER_JSON_pack_amount ("amount",
|
||||||
|
&pd->amount),
|
||||||
|
TALER_JSON_pack_amount ("refund_fee",
|
||||||
|
&pd->refund_fee),
|
||||||
|
TALER_JSON_pack_amount ("purse_share_fee",
|
||||||
|
&pd->purse_share_fee),
|
||||||
|
GNUNET_JSON_pack_data_auto ("purse_pub",
|
||||||
|
&pd->purse_pub),
|
||||||
|
GNUNET_JSON_pack_data_auto ("exchange_sig",
|
||||||
|
&esig),
|
||||||
|
GNUNET_JSON_pack_data_auto ("exchange_pub",
|
||||||
|
&epub))))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
json_decref (history);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return history;
|
return history;
|
||||||
@ -797,7 +847,9 @@ TEH_RESPONSE_compile_reserve_history (
|
|||||||
TALER_JSON_pack_amount ("amount",
|
TALER_JSON_pack_amount ("amount",
|
||||||
&amount),
|
&amount),
|
||||||
TALER_JSON_pack_amount ("purse_fee",
|
TALER_JSON_pack_amount ("purse_fee",
|
||||||
&merge->purse_fee))))
|
&merge->purse_fee),
|
||||||
|
GNUNET_JSON_pack_bool ("merged",
|
||||||
|
merge->merged))))
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
json_decref (json_history);
|
json_decref (json_history);
|
||||||
|
@ -3464,7 +3464,7 @@ BEGIN
|
|||||||
SET
|
SET
|
||||||
current_balance_frac=current_balance_frac-in_history_fee_frac
|
current_balance_frac=current_balance_frac-in_history_fee_frac
|
||||||
+ CASE
|
+ CASE
|
||||||
WHEN reserve_frac < in_history_fee_frac
|
WHEN current_balance_frac < in_history_fee_frac
|
||||||
THEN 100000000
|
THEN 100000000
|
||||||
ELSE 0
|
ELSE 0
|
||||||
END,
|
END,
|
||||||
|
@ -2157,6 +2157,8 @@ prepare_statements (struct PostgresClosure *pg)
|
|||||||
"SELECT"
|
"SELECT"
|
||||||
" pr.amount_with_fee_val"
|
" pr.amount_with_fee_val"
|
||||||
",pr.amount_with_fee_frac"
|
",pr.amount_with_fee_frac"
|
||||||
|
",pr.balance_val"
|
||||||
|
",pr.balance_frac"
|
||||||
",pr.purse_fee_val"
|
",pr.purse_fee_val"
|
||||||
",pr.purse_fee_frac"
|
",pr.purse_fee_frac"
|
||||||
",pr.h_contract_terms"
|
",pr.h_contract_terms"
|
||||||
@ -6515,9 +6517,12 @@ add_p2p_merge (void *cls,
|
|||||||
merge = GNUNET_new (struct TALER_EXCHANGEDB_PurseMerge);
|
merge = GNUNET_new (struct TALER_EXCHANGEDB_PurseMerge);
|
||||||
{
|
{
|
||||||
uint32_t flags32;
|
uint32_t flags32;
|
||||||
|
struct TALER_Amount balance;
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
TALER_PQ_RESULT_SPEC_AMOUNT ("purse_fee",
|
TALER_PQ_RESULT_SPEC_AMOUNT ("purse_fee",
|
||||||
&merge->purse_fee),
|
&merge->purse_fee),
|
||||||
|
TALER_PQ_RESULT_SPEC_AMOUNT ("balance",
|
||||||
|
&balance),
|
||||||
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
||||||
&merge->amount_with_fee),
|
&merge->amount_with_fee),
|
||||||
GNUNET_PQ_result_spec_timestamp ("merge_timestamp",
|
GNUNET_PQ_result_spec_timestamp ("merge_timestamp",
|
||||||
@ -6550,15 +6555,21 @@ add_p2p_merge (void *cls,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
merge->flags = (enum TALER_WalletAccountMergeFlags) flags32;
|
merge->flags = (enum TALER_WalletAccountMergeFlags) flags32;
|
||||||
|
if ( (! GNUNET_TIME_absolute_is_future (
|
||||||
|
merge->merge_timestamp.abs_time)) &&
|
||||||
|
(-1 != TALER_amount_cmp (&balance,
|
||||||
|
&merge->amount_with_fee)) )
|
||||||
|
merge->merged = true;
|
||||||
}
|
}
|
||||||
|
if (merge->merged)
|
||||||
|
GNUNET_assert (0 <=
|
||||||
|
TALER_amount_add (&rhc->balance_in,
|
||||||
|
&rhc->balance_in,
|
||||||
|
&merge->amount_with_fee));
|
||||||
GNUNET_assert (0 <=
|
GNUNET_assert (0 <=
|
||||||
TALER_amount_add (&rhc->balance_in,
|
TALER_amount_add (&rhc->balance_out,
|
||||||
&rhc->balance_in,
|
&rhc->balance_out,
|
||||||
&merge->amount_with_fee));
|
&merge->purse_fee));
|
||||||
GNUNET_assert (0 <=
|
|
||||||
TALER_amount_subtract (&rhc->balance_out,
|
|
||||||
&rhc->balance_out,
|
|
||||||
&merge->purse_fee));
|
|
||||||
merge->reserve_pub = *rhc->reserve_pub;
|
merge->reserve_pub = *rhc->reserve_pub;
|
||||||
tail = append_rh (rhc);
|
tail = append_rh (rhc);
|
||||||
tail->type = TALER_EXCHANGEDB_RO_PURSE_MERGE;
|
tail->type = TALER_EXCHANGEDB_RO_PURSE_MERGE;
|
||||||
|
@ -1535,6 +1535,12 @@ struct TALER_EXCHANGE_ReserveHistoryEntry
|
|||||||
*/
|
*/
|
||||||
enum TALER_WalletAccountMergeFlags flags;
|
enum TALER_WalletAccountMergeFlags flags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True if the purse was actually merged, false
|
||||||
|
* if only the @e purse_fee was charged.
|
||||||
|
*/
|
||||||
|
bool merged;
|
||||||
|
|
||||||
} merge_details;
|
} merge_details;
|
||||||
|
|
||||||
} details;
|
} details;
|
||||||
|
@ -1144,6 +1144,12 @@ struct TALER_EXCHANGEDB_PurseMerge
|
|||||||
*/
|
*/
|
||||||
enum TALER_WalletAccountMergeFlags flags;
|
enum TALER_WalletAccountMergeFlags flags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* true if the purse was actually successfully merged,
|
||||||
|
* false if the @e purse_fee was charged but the
|
||||||
|
* @e amount was not credited to the reserve.
|
||||||
|
*/
|
||||||
|
bool merged;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -417,6 +417,8 @@ parse_merge (struct TALER_EXCHANGE_ReserveHistoryEntry *rh,
|
|||||||
&rh->details.merge_details.merge_timestamp),
|
&rh->details.merge_details.merge_timestamp),
|
||||||
GNUNET_JSON_spec_timestamp ("purse_expiration",
|
GNUNET_JSON_spec_timestamp ("purse_expiration",
|
||||||
&rh->details.merge_details.purse_expiration),
|
&rh->details.merge_details.purse_expiration),
|
||||||
|
GNUNET_JSON_spec_bool ("merged",
|
||||||
|
&rh->details.merge_details.merged),
|
||||||
GNUNET_JSON_spec_end ()
|
GNUNET_JSON_spec_end ()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -447,10 +449,22 @@ parse_merge (struct TALER_EXCHANGE_ReserveHistoryEntry *rh,
|
|||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
if (rh->details.merge_details.merged)
|
||||||
|
{
|
||||||
|
if (0 >
|
||||||
|
TALER_amount_add (uc->total_in,
|
||||||
|
uc->total_in,
|
||||||
|
&rh->amount))
|
||||||
|
{
|
||||||
|
/* overflow in history already!? inconceivable! Bad exchange! */
|
||||||
|
GNUNET_break_op (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (0 >
|
if (0 >
|
||||||
TALER_amount_add (uc->total_in,
|
TALER_amount_add (uc->total_out,
|
||||||
uc->total_in,
|
uc->total_out,
|
||||||
&rh->amount))
|
&rh->details.merge_details.purse_fee))
|
||||||
{
|
{
|
||||||
/* overflow in history already!? inconceivable! Bad exchange! */
|
/* overflow in history already!? inconceivable! Bad exchange! */
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
|
Loading…
Reference in New Issue
Block a user