summaryrefslogtreecommitdiff
path: root/src/exchangedb/exchange_do_reserve_purse.sql
diff options
context:
space:
mode:
Diffstat (limited to 'src/exchangedb/exchange_do_reserve_purse.sql')
-rw-r--r--src/exchangedb/exchange_do_reserve_purse.sql43
1 files changed, 24 insertions, 19 deletions
diff --git a/src/exchangedb/exchange_do_reserve_purse.sql b/src/exchangedb/exchange_do_reserve_purse.sql
index a110c85a3..8ae652e69 100644
--- a/src/exchangedb/exchange_do_reserve_purse.sql
+++ b/src/exchangedb/exchange_do_reserve_purse.sql
@@ -18,10 +18,11 @@ CREATE OR REPLACE FUNCTION exchange_do_reserve_purse(
IN in_purse_pub BYTEA,
IN in_merge_sig BYTEA,
IN in_merge_timestamp INT8,
+ IN in_reserve_expiration INT8,
+ IN in_reserve_gc INT8,
IN in_reserve_sig BYTEA,
IN in_reserve_quota BOOLEAN,
- IN in_purse_fee_val INT8,
- IN in_purse_fee_frac INT4,
+ IN in_purse_fee taler_amount,
IN in_reserve_pub BYTEA,
IN in_wallet_h_payto BYTEA,
OUT out_no_funds BOOLEAN,
@@ -32,7 +33,7 @@ AS $$
BEGIN
-- Store purse merge signature, checks for purse_pub uniqueness
-INSERT INTO exchange.purse_merges
+INSERT INTO purse_merges
(partner_serial_id
,reserve_pub
,purse_pub
@@ -52,7 +53,7 @@ THEN
-- Note that by checking 'merge_sig', we implicitly check
-- identity over everything that the signature covers.
PERFORM
- FROM exchange.purse_merges
+ FROM purse_merges
WHERE purse_pub=in_purse_pub
AND merge_sig=in_merge_sig;
IF NOT FOUND
@@ -99,31 +100,39 @@ ELSE
-- UPDATE reserves balance (and check if balance is enough to pay the fee)
IF (out_no_reserve)
THEN
- IF ( (0 != in_purse_fee_val) OR
- (0 != in_purse_fee_frac) )
+ IF ( (0 != in_purse_fee.val) OR
+ (0 != in_purse_fee.frac) )
THEN
out_no_funds=TRUE;
RETURN;
END IF;
+ INSERT INTO exchange.reserves
+ (reserve_pub
+ ,expiration_date
+ ,gc_date)
+ VALUES
+ (in_reserve_pub
+ ,in_reserve_expiration
+ ,in_reserve_gc);
ELSE
UPDATE exchange.reserves
SET
- current_balance_frac=current_balance_frac-in_purse_fee_frac
+ current_balance.frac=(current_balance).frac-in_purse_fee.frac
+ CASE
- WHEN current_balance_frac < in_purse_fee_frac
+ WHEN (current_balance).frac < in_purse_fee.frac
THEN 100000000
ELSE 0
END,
- current_balance_val=current_balance_val-in_purse_fee_val
+ current_balance.val=(current_balance).val-in_purse_fee.val
- CASE
- WHEN current_balance_frac < in_purse_fee_frac
+ WHEN (current_balance).frac < in_purse_fee.frac
THEN 1
ELSE 0
END
WHERE reserve_pub=in_reserve_pub
- AND ( (current_balance_val > in_purse_fee_val) OR
- ( (current_balance_frac >= in_purse_fee_frac) AND
- (current_balance_val >= in_purse_fee_val) ) );
+ AND ( ((current_balance).val > in_purse_fee.val) OR
+ ( ((current_balance).frac >= in_purse_fee.frac) AND
+ ((current_balance).val >= in_purse_fee.val) ) );
IF NOT FOUND
THEN
out_no_funds=TRUE;
@@ -136,7 +145,7 @@ out_no_funds=FALSE;
-- Store account merge signature.
-INSERT INTO exchange.account_merges
+INSERT INTO account_merges
(reserve_pub
,reserve_sig
,purse_pub
@@ -149,9 +158,5 @@ INSERT INTO exchange.account_merges
END $$;
-COMMENT ON FUNCTION exchange_do_reserve_purse(BYTEA, BYTEA, INT8, BYTEA, BOOLEAN, INT8, INT4, BYTEA, BYTEA)
+COMMENT ON FUNCTION exchange_do_reserve_purse(BYTEA, BYTEA, INT8, INT8, INT8, BYTEA, BOOLEAN, taler_amount, BYTEA, BYTEA)
IS 'Create a purse for a reserve.';
-
-
-
-